2011-11-16 57 views
2

使用rails 3.1,ruby 1.92。我在商店裏有很多產品:電影,音樂和書籍。我在我的產品控制器中有三個示波器,都稱爲相同的(電影,音樂和書籍)。我們的任務的重點是讓產品控制器的索引顯示網站加載的所有項目。沒問題。然後,我們必須鏈接到書籍,音樂或電影,並顯示適當的產品。也完成了。Ruby錯誤未定義的方法`model_name'爲NilClass:使用範圍的類

但是,我現在在我的視圖中有三個文件,我需要做一個部分來顯示所有這些。我用過這個:

<% @products.each do |product| %> 
    <div class="entry"> 
    <%= image_tag(product.image_url) %> 
    <h3><%= product.title %></h3> 
    <%= sanitize(product.description) %> 
    <div class="price_line"> 
     <span class="price"><%= number_to_currency(product.price) %></span> 
     <%= button_to 'Add to Cart', line_items_path(:product_id => product) %> 
    </div> 
    </div> 
<% end %> 

我真的不明白髮生了什麼事。我已經採取了最初的'@產品',並使用我的範圍,它現在是@book或@music等。在我的代碼與三個文件,我有這個代碼,而不是'@products '和'do | product |',我有@books do | book |等等。

我需要做些什麼才能使用@books,@music和@movies來實現部分功能?每次我傳遞這些變量時,都會收到NilClass錯誤。我如何去做這件事?

回答

5

退房的rails guide on layouts and rendering - 尤其是部分的諧音,我直接與你聯繫。

基本上,您想要重構代碼以避免使用@products,@books,@movies等,並使局部變量使用局部變量。

在自己的產品視圖:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @products} %> 

在您查看圖書:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @books} %> 

在你的電影查看:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @movies} %> 

而且裏面的部分,只是改變你的@products.each do |product|products.each do |product|

+1

非常感謝。 –

+0

沒問題,如果您打算繼續學習Rails,請製作這些導軌指南的書籤。他們定期更新到新版本的rails,有很好的例子,並且相當全面。唯一更好的是自己閱讀源代碼。祝你的班級好運! –

3

如果我沒有理解好你的問題,你需要這樣的東西:

render :partial => 'partial_name', locals => {:items => @books} 

而且,在你的部分,你可以這樣做:

items.each do |item| ... 
+0

我會在哪裏放置渲染語句?只有一個@user可以通知;郵件所有者將始終被通知(點擊此框取消) –

+1

在您的主視圖中。你用不同的「items」參數調用3次partial。 –

相關問題