Ошибка Mongoid «неопределенный метод «удалить» для: формат: символ»

#ruby-on-rails #mongodb #nested #mongoid

#ruby-on-rails #mongodb #вложенный #mongoid

Вопрос:

У меня есть 2 вложенные модели:

 class Interstate
  include Mongoid::Document
  field :name, :type => String
  field :url, :type => String
  field :time_zone, :type => String
  embeds_many :roadmaps
end

class Roadmap
  include Mongoid::Document
  field :title, :type => String
  field :privacy, :type => Integer
  field :interstate_id, :type => Integer
  embedded_in :interstate, :inverse_of => :roadmaps
end
 

Я не уверен в разнице между has_many|belongs_to и embeds_many|embedded_in , но, согласно документации, последнее для меня лучше, в любом случае оба не работают. Также у меня есть вложенные ресурсы:

  resources :interstates do
   resources :roadmaps
 end
 

И появляется ошибка, когда я пытаюсь создать дорожную карту в межгосударственном.

Контроллер дорожной карты является стандартным каркасом с методом before_filter для определения межгосударственных:

  private
 def get_interstate
   @interstate = Interstate.find(params[:interstate_id])
 end
 

В случае с embeds_many :roadmaps и embedded_in :interstate возникает другая ошибка:

 NoMethodError in Roadmaps#new

Showing /home/alder/RubymineProjects/interstate/app/views/roadmaps/_form.html.haml where line #1 raised:

undefined method `delete' for :format:Symbol

Extracted source (around line #1):

1: = simple_form_for(@interstate, @roadmap) do |f|
2:   = f.error_notification
3: 
4:   .inputs

Trace of template inclusion: app/views/roadmaps/new.html.haml

Rails.root: /home/alder/RubymineProjects/interstate
Application Trace | Framework Trace | Full Trace

app/views/roadmaps/_form.html.haml:1:in `_app_views_roadmaps__form_html_haml___160176716082020505_38930380'
app/views/roadmaps/new.html.haml:3:in `_app_views_roadmaps_new_html_haml__4577296702858298215_34853620'
app/controllers/roadmaps_controller.rb:31:in `new'
 

Консоль:

 undefined method `delete' for :format:Symbol (ActionView::Template::Error)
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/mongoid-2.3.2/lib/mongoid/persistence/operations.rb:80:in `notifying_parent?'                                                                                 
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/mongoid-2.3.2/lib/mongoid/persistence/operations/embedded/remove.rb:30:in `block in persist'                                                                  
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/mongoid-2.3.2/lib/mongoid/persistence/deletion.rb:23:in `prepare'                                                                                             
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/mongoid-2.3.2/lib/mongoid/persistence/operations/embedded/remove.rb:29:in `persist'                                                                           
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/mongoid-2.3.2/lib/mongoid/persistence.rb:56:in `remove'                                                                                                       
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/actionpack-3.1.1/lib/action_view/helpers/form_helper.rb:392:in `apply_form_for_options!'                                                                      
/home/alder/.rvm/gems/ruby-1.9.2-p290@global/gems/actionpack-3.1.1/lib/action_view/helpers/form_helper.rb:365:in `form_for'
 

Полный стек

Итак, возможно, мне следует добавить некоторые опции для отмены уведомления, но более интересно, почему формат — это символ, я думаю, это должен быть какой-то объект модели. Возможно @interstate , это не модель.

Этот код корректно работает с базой данных sqlite.

Ответ №1:

Вопрос был заключен в круглые скобки, а не в квадратные.

simple_form_for [@interstate, @roadmap]