Rails 3 个模型的 4 个嵌套资源错误
Rails 4 Nested Resources Error with 3 models
Error: ActiveRecord::RecordNotFound Couldn't find Option with 'id'=
当我将 link 添加到选项 show.html.erb
以获取该选项的所有注册时,就会发生这种情况。为了获取事件 ID 和选项 ID,我将以下内容添加到 OptionsController 的显示方法中:
@event = Event.find(params[:event_id])
@option = Option.find(params[:option_id])
这是我要添加到 show.html.erb
文件的 link:
link_to "Registrations", event_option_registrations_path(@option)
这是我的 3 个模型的外观:事件、选项和注册
event.rb
:
class Event < ActiveRecord::Base
has_many :options, dependent: :destroy
end
option.rb
:
class Option < ActiveRecord::Base
belongs_to :event
has_many :registrations
end
routes.rb
:
resources :events do
resources :options do
resources :registrations
end
注册路线:
event_option_registrations_path /events/:event_id/options/:option_id/registrations(.:format)
注册#index
Error: ActiveRecord::RecordNotFound Couldn't find Option with 'id'=
此错误消息是说,当您执行此操作时找不到 id = nil
的选项:
@option = Option.find(params[:option_id])
这意味着,在这种情况下,您的 params[:option_id]
是 nil
。
你应该像这样在你的控制器中放置一个打印语句:
def your_action
# these are for debugging
puts params.inspect
puts params[:option_id]
@event = Event.find(params[:event_id])
@option = Option.find(params[:option_id])
end
然后您将能够看到您在 params
哈希中得到了什么。然后,您可以获取正确的属性,然后完成其余的工作。希望这可以帮助您调试问题并解决您的问题。
更新
改变这个:
@option = Option.find(params[:option_id])
收件人:
@option = Option.find(params[:id])
因为,在您的参数散列中,您没有 option_id
键,但是您有一个 id
键,它指的是 option
的 ID。
Error: ActiveRecord::RecordNotFound Couldn't find Option with 'id'=
当我将 link 添加到选项 show.html.erb
以获取该选项的所有注册时,就会发生这种情况。为了获取事件 ID 和选项 ID,我将以下内容添加到 OptionsController 的显示方法中:
@event = Event.find(params[:event_id])
@option = Option.find(params[:option_id])
这是我要添加到 show.html.erb
文件的 link:
link_to "Registrations", event_option_registrations_path(@option)
这是我的 3 个模型的外观:事件、选项和注册
event.rb
:
class Event < ActiveRecord::Base
has_many :options, dependent: :destroy
end
option.rb
:
class Option < ActiveRecord::Base
belongs_to :event
has_many :registrations
end
routes.rb
:
resources :events do
resources :options do
resources :registrations
end
注册路线:
event_option_registrations_path /events/:event_id/options/:option_id/registrations(.:format)
注册#index
Error: ActiveRecord::RecordNotFound Couldn't find Option with 'id'=
此错误消息是说,当您执行此操作时找不到 id = nil
的选项:
@option = Option.find(params[:option_id])
这意味着,在这种情况下,您的 params[:option_id]
是 nil
。
你应该像这样在你的控制器中放置一个打印语句:
def your_action
# these are for debugging
puts params.inspect
puts params[:option_id]
@event = Event.find(params[:event_id])
@option = Option.find(params[:option_id])
end
然后您将能够看到您在 params
哈希中得到了什么。然后,您可以获取正确的属性,然后完成其余的工作。希望这可以帮助您调试问题并解决您的问题。
更新
改变这个:
@option = Option.find(params[:option_id])
收件人:
@option = Option.find(params[:id])
因为,在您的参数散列中,您没有 option_id
键,但是您有一个 id
键,它指的是 option
的 ID。