0

製品が属するすべてのカテゴリのリストを含むサイドバーを追加したアプリケーションがあります。

この機能は正常に機能しますが、問題があります。

コードは現在のページの製品のみをスキャンし、利用可能な実際のカテゴリはスキャンしません。あれは:

私のアプリケーションでは、製品の5つのカテゴリ(あります)がありますが、現在のページには3つの製品しかありません。したがって、コードには実際の5つではなく、3つのカテゴリしか表示されません。これを修正するにはどうすればよいですか?これはインスタンス変数と関係がありますか?

これが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で入手できます。

これに答えるためにあなたの人々をちょっと見てみるかもしれません...

4

3 に答える 3

1

すべてのカテゴリを表示したい場合は、単に

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

商品が添付されているカテゴリを表示しようとしている場合を除きます

于 2012-09-26T02:47:37.450 に答える
1

別のモデルをテーブルにCategoryマップしている場合は、一意のカテゴリが返されます。categoriesCategory.select(:name).uniq

あなたの場合、テーブルにカテゴリ列があります。その場合は

Product.select(:category).uniq一意のカテゴリを持つ製品のリストを返します。

これで、テンプレートは次のようにすっきりします。

<% for product in Product.select(:category).uniq %>
   <%= product.category %>
<% end %>
于 2012-09-26T06:11:14.083 に答える
0

サイドバーも、残りのページレイアウトと同じリクエストで処理されると想定しています(つまり、個別のコントローラーアクションはありません)。

@productsあなたはおそらく2つの場所で使用したでしょう...1つはメインページの製品を取得するためのもので、もう1つはすべての製品を取得するためのものです...それらの名前を変更し、それに応じて変更する必要があるかもしれません...

それが役に立たない場合は、より多くのコードを表示してください...ページをレンダリングしているbackedに関連しています...

于 2012-09-25T12:14:46.923 に答える