【问题标题】:Rails listing problemRails 列表问题
【发布时间】:2011-08-25 06:57:22
【问题描述】:

我生成了一个脚手架并创建了一个临时应用程序。我想在应用程序的任何地方(在 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

后面的代码是左列的代码。 我该如何解决?

【问题讨论】:

    标签: ruby-on-rails scaffold nomethoderror


    【解决方案1】:

    Rails 抱怨是因为您试图将 nil 视为一个数组。如果没有发布 application.html.erb 的行号,我不得不猜测,但我猜 @items 是零。

    如果您在布局中包含此内容,则需要确保在每个请求中都设置了 @items 数组。是吗?一种简单的方法是在 application_controller.rb 中添加before_filter

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

    这假定所有使用此布局的控制器都扩展了应用程序控制器。

    【讨论】:

    • 这不是问题。还是谢谢
    • @Ariel,根据我从问题中了解到的情况,@drewbob 的回答似乎很成功。也许你应该更好地解释问题或问题。
    【解决方案2】:

    确保你的控制器有这个:

    @items = Item.all
    

    那么在你看来你想要这个:

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

    它可能会失败,因为links 之一没有标题。

    【讨论】:

    • 不是这样的。所有链接都有一个标题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-06
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多