我从控制器动作渲染变量。代码是:
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
这是动作'show'。 'show'视图如下:
<% @array_bookmark = @bookmark.class == Array ? @bookmark : [@bookmark] %>
<% @array_bookmark.each do |book| %>
<li><%= book.url%>
<b>Title:</b>
<li><%= book.title%>
<% end %>
这应该打印带有属性url和title的书签表中的记录。但它给出了一个错误:
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>
这是我得到的错误。我可以给任何人一个合适的解决方案,以便我可以正确地在视图中打印表记录吗?
答案 0 :(得分:0)
问题是您应该使用my answer来解决之前的问题:
<% Array(@bookmark).each do |book| %>
您拥有的代码会检查@bookmark
是否为类Array
的实例;如果为零,则返回false,@array_bookmark
将被分配[nil]
。然后,当您在each
循环中对其进行迭代时,您将获得nil
的{{1}}值。通过使用book
,您可以避免此问题:Array()
计算为空数组,因此循环永远不会执行,并且您不会收到错误。