2015-05-25 9 views
0

Я работаю над базовым приложением Rails. Чтобы все было в порядке, я создал два леса.Вложенные ресурсы - UrlGenerationError - Нет совпадений маршрутов

  • календарь
  • content_items

Затем я создал соответствующие ассоциации.

приложение/модели/calendar.rb

class Calendar < ActiveRecord::Base 
    has_many :content_items 
end 

приложение/модели/content_item.rb

class ContentItem < ActiveRecord::Base 
    belongs_to :calendar 
end 

routes.rb

resources :calendars do 
    resources :content_items 
end 

Однако, теперь, когда я пытаюсь просмотреть content_items определенного календаря, я получаю следующее сообщение об ошибке:

ActionController::UrlGenerationError - No route matches {:action=>"show", :calendar_id=>nil, :controller=>"content_items", :id=>"5"} missing required keys: [:calendar_id]

Это говорит ошибка исходит от: просмотров/content_items/index.html.erb

<td><%= link_to 'Show', calendar_content_item_path(content_item.calendar, content_item) %></td> 

Я пробовал несколько разных маршрутов, но они приводят к различным ошибкам. Нужно ли обновлять модель и/или контроллеры, так как я создал вложенные маршруты?

+0

в основном рельсы не в состоянии генерировать URL только из content_item объекта. поскольку он вложен, вам также необходимо передать родительский объект календаря. check [documentation] (http://edgeguides.rubyonrails.org/routing.html#creating-paths-and-urls-from-objects) –

ответ

2

Попробуйте использовать

<td><%= link_to 'Show', calendar_content_item_path(content_item.calendar, content_item) %></td>

+0

Пробовал это. Я думаю, что он ближе. Обновлен код и ошибка в исходном сообщении. – JeremyE

+0

Обновлен ответ, пожалуйста, проверьте. Была небольшая орфографическая ошибка :) –

+0

Обновлено оригинальное сообщение снова. Я смущен ошибкой, потому что появляется идентификатор. – JeremyE

0

Вы забыли добавить _path суффикс маршруту:

<td><%= link_to 'Show', content_items_path(calendar) %></td> 
+0

Это приводит к следующему: неопределенная локальная переменная или метод 'content_item_path ' – JeremyE

+0

+ забыть использовать множественная форма: 'content_items_path' –

+0

+ забыть передать переменную' calendar' для определения соответствующего календаря –