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 と 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>

これは私が得るエラーです。ビュー内のテーブルレコードを適切に印刷できるように、誰かが適切な解決策を教えてもらえますか?

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 に答える