0

我正在从控制器操作中渲染一个变量。代码是:

def show1
  if request.post?
    @bookmark = Bookmark.all
    respond_to do |format|
      format.html # index.html.erb
      format.json { render json: @bookmark }
    end
  end  
end

这是动作“表演”。“显示”视图如下:

<% @array_bookmark = @bookmark.class == Array ? @bookmark : [@bookmark] %>
<% @array_bookmark.each do |book| %>
<li><%= book.url%>
<b>Title:</b>
<li><%= book.title%>
<% end %>

这应该打印带有属性 url 和标题的书签表中的记录。但它给出了一个错误:

NoMethodError in Bookmark#show

Showing C:/Sites/newapp/app/views/bookmark/show.html.erb where line #10 raised:

undefined method `url' for nil:NilClass

Extracted source (around line #10):

7:   <b>Url:</b>
8: <% @array_bookmark = @bookmark.class == Array ? @bookmark : [@bookmark] %>
9: <% @array_bookmark.each do |book| %>
10:   <li><%= book.url%></li>
11:   <b>Title:</b>
12:   <li><%= book.title%></li>
13:   <li><%= book.tags%></li>

这是我得到的错误。我可以给我一个适当的解决方案,以便我可以正确打印视图中的表格记录吗?

4

1 回答 1

0

问题是您应该使用对您之前问题的回答:

<% Array(@bookmark).each do |book| %>

您拥有的代码检查是否@bookmark是该类的实例Array;如果它是 nil,这将返回 false@array_bookmark并将被分配[nil]。然后,当您在循环中对其进行迭代时,您each将获得nil. book通过使用Array()您可以避免这个问题:Array(nil)计算为一个空数组,因此循环永远不会执行并且您不会收到错误。

于 2012-12-13T10:06:05.833 回答