使用rails 3.1,ruby 1.92。我在商店里有很多产品:电影,音乐和书籍。我的产品控制器中有三个示波器,都称为相同(电影,音乐和书籍)。我们的任务是让产品控制器的索引显示网站加载的所有项目。没问题。然后,我们必须链接到书籍,音乐或电影,并显示相应的产品。也完成了。
但是,我现在在视图中有三个文件,我需要部分显示所有这些文件。我用过这个:
<% @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 %>
我真的不明白发生了什么。我已经采用了最初的'@product'并且使用了我的示波器,它现在是@book,或@music等。在我的代码中有三个文件,我有这个代码,但不是'@products '和'做|产品|',我有@books做|书|等
我需要做什么才能使用@books,@ music和@movies来实现部分功能?每次我传递这些变量,我都会得到NilClass错误。我该怎么做?
答案 0 :(得分:5)
查看rails guide on layouts and rendering - 尤其是有关我直接链接到的部分内容的部分。
基本上,您希望重构代码以避免使用@ product,@ books,@ movie等,并使用局部变量进行局部化。
在您的产品视图中:
<%= 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 :(得分:3)
如果我很清楚您的问题,您需要以下内容:
render :partial => 'partial_name', locals => {:items => @books}
而且,在你的部分内容中,你可以这样做:
items.each do |item| ...