2011-11-16 86 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。 –

相关问题