Путаница маршрутизации Rails 3.1

#ruby-on-rails #routing #ruby-on-rails-3.1 #routes

#ruby-on-rails #маршрутизация #ruby-on-rails-3.1 #маршруты

Вопрос:

Я пытаюсь создать ссылку на запись в моем приложении:

 <ul class="presentation-box">
  <% @presentations.each do |presentation| %>
   <li><%= link_to "Presentation", presentations_path(@presentation) %></li>
   <li><%= presentation.author %></li>
  <% end %>
</ul>
  

Со следующей строкой в файле маршрутов:

 resources :presentations
root :to => 'presentations#index'
  

По какой-то причине, когда я нажимаю на ссылку, она приводит меня к представлению индекса презентации. Я полагаю, что это должно привести меня к просмотру отдельной записи?

Я упускаю что-то очевидное?

Ответ №1:

Ваш link_to неверен.

presentations_path фактически укажет вам на то index , что вы хотите presentation_path(presentation) указать непосредственно на ресурс.

Кроме того, вы можете просто сделать <%= link_to 'Presentation', presentation %> , и Rails построит для вас правильный путь

Комментарии:

1. В более короткой версии можно ли поместить заголовок записи презентации вместо слова Презентация?

2. Да, <%= link_to @presentation.title, @presentation %> . Первый аргумент — это текст, который будет отображаться, вторым будет ресурс, который rails преобразует для вас в путь.

3. Хм .. неопределенный метод `title’ для nil:NilClass <— когда я использую ваш последний пример кода. Я что-то упускаю?

4. Ой, измените @presentation на presentation параметр, который вы передаете в свой each блок.

Ответ №2:

Измените его на presentation_path(presentation)