用于NilClass的Ruby错误未定义方法`model_name':使用范围的类

时间:2011-11-16 18:56:47

标签: ruby-on-rails ruby

使用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错误。我该怎么做?

2 个答案:

答案 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| ...