侧边栏需要包含所有类别但不是

时间:2012-09-25 12:08:42

标签: ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2

我有一个应用程序,我在其中添加了一个侧栏,其中列出了所有产品所属的类别。

此功能正常但有问题。

代码仅扫描当前页面上的产品,而不扫描可用的实际类别。那就是:

在我的应用程序中,有5个类别(有)产品,但在当前页面上只有3个产品。所以代码只显示了3个类别,而不是实际的5个类别。 我怎样才能解决这个问题?这与实例变量有什么关系吗?

以下是application.html.erb

中的代码
<div>
  <% a = [""] %>
    <h1>Categories</h1>
    <% @products.each do |product| %>
    <% a = a + [product.category] %>
    <% a = a.uniq %>        
  <% end %>

  <% a.each do |c| %>
     <p class="text-error"><%= c %></p>
  <% end %>
</div>

迁移文件..

class CreateProducts < ActiveRecord::Migration
   def change
     create_table :products do |t|
       t.string :name
       t.text :description
       t.date :delivery_date
       t.decimal :price

       t.timestamps
    end
   end
 end

 class CreateCommentsTable < ActiveRecord::Migration
  def up
    create_table :comments do |t|
      t.string :commenter
      t.text :body
      t.references :product

      t.timestamps
    end
    add_index :comments, :product_id
  end

  def down
  end
 end


 class AddCategoryToProducts < ActiveRecord::Migration
   def change
     add_column :products, :category, :string
   end
end

路线..

resources :products do
    resources :comments 
end

该代码位于https://github.com/abhishekdagarit/sample-app.git

可能会让你的人快速回答一下......

3 个答案:

答案 0 :(得分:1)

如果您想显示所有类别,只需执行

<% for category in Category.all %>
   <%= category.name %>
<% end %>

除非您尝试显示附有产品的类别

答案 1 :(得分:1)

如果您将单独的Category模型映射到categories表,则Category.select(:name).uniq将返回唯一类别。

在您的情况下,您有表格的类别列。所以在那种情况下

Product.select(:category).uniq会返回包含唯一类别的商品列表。

所以现在你的模板会更清晰:

<% for product in Product.select(:category).uniq %>
   <%= product.category %>
<% end %>

答案 2 :(得分:0)

我假设您的侧边栏也处理与您的其余页面布局相同的请求(即没有单独的控制器操作)。

@products你最有可能在两个地方使用过...一个用于获取主页面的产品,一个用于获取所有产品...你可能需要重命名它们并相应地修改它...

显示更多代码,如果这没有帮助...与正在呈现页面的支持相关...