私のアプリケーションは次の 5 つのモデルで構成されています。スーパーマーケットにはさまざまなカテゴリの製品があり、これらのカテゴリの製品は複数のブランドによって製造されています。
ここで、スーパーマーケットに 1 つ (または 2 つ)の選択フィールドが必要です。このフォームでは、 Category内の 1 つの要素をその名前が表示されて選択でき、 Brand内の 1 つ以上の要素をその名前が表示された状態で選択できます。これはOriginに格納できます。
が使えると思いますがcollection_select
、ここではどのように活用すればよいでしょうか。
class Supermarket < ActiveRecord::Base
has_many :supplies
has_many :origins, :through => :supplies
end
class Supply < ActiveRecord::Base
belongs_to :origin
belongs_to :supermarket
end
class Origin < ActiveRecord::Base
belongs_to :category
belongs_to :brand
end
class Category < ActiveRecord::Base
has_many :origins
end
class Brand < ActiveRecord::Base
has_many :origins
end
おそらく、私もモデルを微調整する必要があります...
編集
フォームの結果がどうあるべきかを明確にするには:
スーパーマーケットを編集するフォームで、製品のカテゴリと対応するブランドを選択して、どのカテゴリとこのカテゴリのどのブランドがこの特定のスーパーマーケットで販売されているかがわかるようにします。
スーパーマーケット (フォーム):
スーパーマーケットの名前:ウォルマート
カテゴリ(1 つ選択):
- コーラ(Category_ID 1)
- コーンフレーク(Category_ID 2)
- ...
ブランド(複数選択)
- The Coca-Cola Company (Brand_ID 1)
- ペプシコ(Brand_ID 2)
- ケロッグ社(Brand_ID 3)
- ...
これにより、 Originに次のようなエントリが作成されます。
スーパーマーケット_ID カテゴリ_ID ブランド_ID 1 1 1 1 1 2 2 1 2 2 2 3 ... ... ...
/編集
編集 2
この質問への回答によると、次のようにコンソールからエントリを作成または選択できます。
walmart = Supermarket.create(:name => "Walmart");
cornflakes = Category.create(:name => "Corn Flakes");
kellogs = Brand.create(:name => "Kellog's");
walmart.origins.create(:category_id => cornflakes, :brand_id = kellogs)
フォームを介してこれを利用するにはどうすればよいですか? どうすれば利用できますselect
か、collection_select
または使用できる別のヘルパーがありますか?
/編集 2