1

を通じて、私はアイテム、地域やカテゴリテーブルを持っている彼らはitem_regionを通じて参加しているが、item_categoryテーブルをANSアクセス:関係

class Item < ActiveRecord::Base  
    has_many :item_region  
    has_many :region, :through => :item_region  
    has_many :item_category  
    has_many :category, :through => :item_category  

class Region < ActiveRecord::Base  
    has_many :category  
    has_many :item, ::through => :item_category  

class ItemRegion < ActiveRecord::Base  
    belongs_to :item  
    belongs_to :region  
end  

class Category < ActiveRecord::Base  
    has_many :item, :through => :item_category  
    has_many :item_category  

class ItemCategory < ActiveRecord::Base  
    belongs_to :item  
    belongs_to :category  
end  

に従ってください、私はすべて見つけたいと彼らの関係があります項目の項目とcategory_nameとregion_nameは、region_id、category_id、およびitem_idから結合表を使用しています。

ありがとうございました。

+0

私はこれを掲示しています理由ですが(コメントであり、回答ではありません)。必要な項目を取得してから、その中から希望の地域とカテゴリを取得するのはどうでしょうか。 'item = item.find(item_id'、次に' region = item.regions.where(:id => region_id) 'と' category = item.categories.where(:id => category_id) '。 – prasvin

+0

あなたの返事に感謝します。私が2番目のクエリ領域= item.regions.where(:id => region_id)を起動すると、itemは配列であるため、 "undefine method regions"を返すのでエラーが発生します。 –

+0

Hmm..sorry、しかし 'item'はそうではありません配列 'item = item.find(item_id)'は 'Item'クラスの' item'オブジェクトを与えます 'Item.find(item_id).class'でそれを確認できます"未定義メソッド領域 "例えば、アイテムモデルでは、has_many:regions、:through =>:item_regions'と 'has_many:categories、:through =>:item_categories'である必要があります。 'item.region.where ...'を実行する必要がありますが、項目には多くの領域があるため、これは良い方法ではありません。aのための 'object.collections'を直感的に実行するには、多くの関連があります。 – prasvin

答えて

0

私はこれが正しいと思います。必要な項目を取得してから、その中から希望の地域とカテゴリを取得するのはどうでしょうか。

item = Item.find(item_id) 
region = item.regions.where(:id => region_id) 
category = item.categories.where(:id => category_id) 

もう1つの提案は、あなたの団体に複数のフォームを提供する方が良いです。その直感的なobject.collectionshas_manyの関連付けに使用します。 Railsは上記のコードでも機能しますが、RailsのCoC(Convention over Configuration)の原則に従わないことに注意してください。大会に従えば、多くの設定をする必要はありません。

として個人的にここhttp://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_many

を例を確認し、私はアイテムのモデルに私の関連を持っていることを好むだろう:私はこの1つが正しいだ願ってい

class Item < ActiveRecord::Base  
    has_many :item_regions  
    has_many :regions, :through => :item_regions  
    has_many :item_categories  
    has_many :categories, :through => :item_categories