【问题标题】:Rendering issue in view of ruby on rails鉴于 ruby​​ on rails 的渲染问题
【发布时间】:2012-12-13 09:46:41
【问题描述】:

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

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' 视图如下:

<% @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>

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

【问题讨论】:

    标签: ruby-on-rails-3 rendering


    【解决方案1】:

    问题是您应该在之前的问题中使用my answer

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-24
      • 2010-11-10
      • 1970-01-01
      • 2017-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多