我有一个应用程序,我在其中添加了一个侧栏,其中列出了所有产品所属的类别。
此功能正常但有问题。
代码仅扫描当前页面上的产品,而不扫描可用的实际类别。那就是:
在我的应用程序中,有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
可能会让你的人快速回答一下......
答案 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
你最有可能在两个地方使用过...一个用于获取主页面的产品,一个用于获取所有产品...你可能需要重命名它们并相应地修改它...
显示更多代码,如果这没有帮助...与正在呈现页面的支持相关...