2012-12-13 28 views
0

我從控制器動作中渲染一個變量。代碼是:在rails上查看ruby的渲染問題

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和標題中打印書籤表中的記錄。但它給出了一個錯誤:

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

的問題是,你應該使用my answer到你剛纔的問題:

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

你必須檢查是否@bookmark是類Array的實例代碼;如果爲零,則返回false,@array_bookmark將被分配[nil]。然後,當您在each循環中遍歷它時,將獲得booknil值。通過使用Array()可以避免此問題:Array(nil)的計算結果爲空數組,因此該循環從不執行並且不會出現錯誤。