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

Phi*_*kie 2 ruby ruby-on-rails

使用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 %>
Run Code Online (Sandbox Code Playgroud)

我真的不明白发生了什么.我已经采用了最初的'@product'并且使用了我的示波器,它现在是@book,或@music等.在我的代码中有三个文件,我有这个代码,但不是'@products '和'做|产品|',我有@books做|书| 等等

我需要做什么才能使用@books,@ Music和@movies来实现部分功能?每次我传递这些变量,我都会得到NilClass错误.我该怎么做?

Bre*_*der 5

查看关于布局和渲染rails指南 - 特别是关于partials的部分,我将其直接链接到.

基本上,您希望重构代码以避免使用@ product,@ books,@ movie等,并使用局部变量进行部分调整.

在您的产品视图中:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @products} %>
Run Code Online (Sandbox Code Playgroud)

在您的图书视图中:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @books} %>
Run Code Online (Sandbox Code Playgroud)

在电影视图中:

<%= render :partial => "whatever_you_name_it", :locals => {:products => @movies} %>
Run Code Online (Sandbox Code Playgroud)

在局部内部,只需改变你@products.each do |product|products.each do |product|