鉴于红宝石在轨道上的渲染问题

时间:2012-12-13 09:46:41

标签: ruby-on-rails-3 rendering

我从控制器动作渲染变量。代码是:

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>

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

1 个答案:

答案 0 :(得分:0)

问题是您应该使用my answer来解决之前的问题:

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

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