1
Error: ActiveRecord::RecordNotFound Couldn't find Option with 'id'= 

Это происходит, когда я добавляю ссылку на опции show.html.erb, чтобы получить все регистрационные данные для этой опции. Для того, чтобы получить идентификатор события и опции идентификатор, я добавляю следующее методу шоу в OptionsController:Rails 4 Вложенные ресурсы Ошибка с 3-мя моделями

@event = Event.find(params[:event_id]) 
@option = Option.find(params[:option_id]) 

Это ссылка, я добавляю в файл show.html.erb:

link_to "Registrations", event_option_registrations_path(@option) 

Это как мои 3 модели выглядят: Event, опционные и регистрации

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) регистрации # индекс

+0

Когда происходит ошибка? Откуда ваши «параметры»? Из того, что вы опубликовали, похоже, что «params [: option_id]» - это значение nil во время выполнения. Загружайте журналы веб-сервера, чтобы мы могли видеть, что происходит до и после ошибки. – Beartech

+0

благодарит за ответ. ** перед добавлением: @option = Option.find (params [: option_id]) ** Начато GET "/ events/1/options/25" for :: 1 at 2015-11-20 21:55:03 - 0500 Обработка по OptionsController # показать как HTML Параметры: {"event_id" => "1", "id" => "25"} Option Load (0.0ms) SELECT "options". * FROM "options" WHERE "options". "Id" =? LIMIT 1 [["id", 25]] Загрузка события (0.0ms) ВЫБРАТЬ "события". * FROM "events" WHERE "events". "Id" =? LIMIT 1 [["id", 1]] Загрузка события (0.0ms) ВЫБРАТЬ "события". * FROM "events" WHERE "events". "Id" =? LIMIT 1 [["id", 1]] – Asan

+0

Представленные опции/show.html.erb в макетах/приложении (1.0ms) Завершено 200 OK в 74ms (Просмотров: 73.0ms | ActiveRecord: 0.0ms) – Asan

ответ

1
Error: ActiveRecord::RecordNotFound Couldn't find Option with '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 хэш. Затем вы можете получить правильный атрибут, а затем выполнить оставшуюся часть работы. Надеюсь, это поможет вам отладить проблему и решить вашу проблему.

Update

изменить это:

@option = Option.find(params[:option_id]) 

To:

@option = Option.find(params[:id]) 

Потому что, в вашем Params хэш, вы не имеете option_id ключ, но у вас есть id ключ который ссылается на идентификатор option.

+1

Это сработало. Чтобы сделать ссылку на работу, я изменил ее на это: <% = link_to "Регистрация", event_option_registrations_path (@ event, @ option)%> Спасибо! – Asan