以下に定義されている関連付けを考えれば、私は がカテゴリに属しているすべての分類にアクセスできない理由を明らかにすることができます。 私はそれがそこにある多型の関係 があるという事実とは何かを持って推測しているが、私は、私はちょうど 関連文を使用してやりたいための適切な方法があるかどうかを知りたいのですが、あるいは私が持っている場合"私自身のロール"にして、 で2つの段階のクラシファイドを取得します。おそらくhas_many:through二次多型
コードだけ見て理解しやすく:ほとんどの部分について
class CategorySection < ActiveRecord::Base
has_many :categories
has_many :categorizations, :through => :categories
has_many :classifieds, :through => :categories
end
class Category < ActiveRecord::Base
belongs_to :section, :class_name => 'CategorySection',
:foreign_key => 'category_section_id',
:counter_cache => true
has_many :categorizations
has_many :classifieds, :through => :categorizations,
:source => :categorizable,
:source_type => 'Classified'
end
class Categorization < ActiveRecord::Base
belongs_to :category, :counter_cache => true
belongs_to :categorizable, :polymorphic => true
end
class Classified < ActiveRecord::Base
has_one :categorization, :as => :categorizable, :dependent => :destroy
has_one :category, :through => :categorization
end
を、これはすべて私が把握することはできません1つの関連を除いて正常に動作しています。 は、どのように私はすぐにそれに属するすべてのクラシファイド広告を見つけることができ、CategorySectionを考えると?例えば
:
カテゴリーを考えると、私はすべてのそれの分類を取得することができます:
>> @category.categorizations
>> [<Categorization...>,<Categorization...>]
カテゴリーを考えると、私はそれにすべての分類を取得することができます:
>> @category.classifieds
>> [<Classified...>,<Classified...>]
を考えます
>> @section.categories
>> [<Category...>,<Category...>]
0:セクション、私はそのカテゴリのすべてを取得することができます私が通過してその分類の全てを取得することはできません、第与えられ、カテゴリ
>> @section.categorizations
>> [<Categorization...>,<Categorization...>]
:しかし
は、セクションを考えると、私が通過してその分類の全てを取得することができますカテゴリ
>> @section.classifieds
ActiveRecord::HasManyThroughSourceAssociationMacroError:
Invalid source reflection macro :has_many :through for
has_many :classifieds, :through => :categories. Use :source
to specify the source reflection.
私は」エラーメッセージのアドバイスを取ってソースを指定していますが、それでも動作させることはできません。私は、私が考えることができるが役に立たないその協会のオプションのすべての組み合わせを試した。
何かアドバイスや提案は、最も高く評価されるだろう。前もって感謝します。敬具
、 ケニー
悲しいことに、ClassifiedのCategorySectionに戻るforeign_keyがないので、うまくいきません。あなたは他の方法をとることができます、ClassifiedはどのCategoryにあるのか分かり、CategorySectionを取得しますが、私が探している方法ではありません。 – kennyc
クラシファイドのカテゴリーセクションに外部キーを戻すことができない理由はありますか? – eggdrop
いいえ、私はそれを行うことはできません厳しい要件は、それは、私はセクションの外部キーを手動でbefore_saveフィルタで設定する必要があることを意味します。それはこの問題の解決策かもしれませんし、そうであればいいですが、もともと関連宣言を使ってこれを解決する方法があれば、私はもともと興味がありました。手動で外部キーを設定することは、通常は "Rails Way"ではないので、私はより正確なソリューションと標準化されたソリューションに興味がありました。 FWIW .... – kennyc