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。