Проблема листинга рельсов - PullRequest
0 голосов
/ 14 мая 2011

Я создал скаффолд и создал случайное приложение. Я хочу перечислить элементы скаффолдов на боковой панели, везде в приложении (внутри application.html.erb). Моя левая колонка в application.html.erb выглядит так:

>  <div id="leftcolumn">
>     <% @items.each do |link| %>
>       <%= link_to link.title, link %>
>     <% end %>
>  </div>

Нажатие на каждый элемент приведет к его методу Show. После выполнения этого, всякий раз, когда я пытаюсь получить доступ к любому методу любого элемента, он показывает мне следующую ошибку:

>     NoMethodError in Items#show
>     
>     Showing F:/Rails/items-list/app/views/layouts/application.html.erb
>     where line #17 raised:
>     
>     You have a nil object when you didn't expect it!
>     You might have expected an instance of Array.
>     The error occurred while evaluating nil.each

И следующий код является кодом левого столбца. Как я могу это исправить?

Ответы [ 2 ]

1 голос
/ 14 мая 2011

Rails жалуется, потому что вы пытаетесь рассматривать nil как массив.Без публикации номеров строк для application.html.erb, я должен догадаться, но я бы предположил, что @items - это ноль.

Если вы включаете это в свой макет, то вам нужно убедиться, что ваш массив @items установлен на каждый запрос.Это?Одним из простых способов сделать это было бы поместить before_filter в ваш application_controller.rb.

class ApplicationController < ActionController::Base
    ...
    before_filter setup_items
    ...
    def setup_items
        @items = Item.all
    end
    ...
end

Предполагается, что все контроллеры, использующие этот макет, расширяют контроллер приложения.

0 голосов
/ 14 мая 2011

Убедитесь, что ваш контроллер имеет это:

@items = Item.all

Тогда, по вашему мнению, вы хотите это:

<div id="leftcolumn">
   <% @items.each do |link| %>
     <%= link_to link.title, link if link.title%>
   <% end %>
</div>

Возможно, сбой, потому что у одного из links нет заголовка.

...