Railsで「仮想関係」(私が呼んでいるもの-実際の用語があるかどうかはわかりません)を実行しようとしています。これが私が持っているもので、間違いなく機能して います。アドレスbelongs_toBusinessおよびBusinesshas_manyAddresses。 アドレスには「カテゴリ」列があります:郵送または物理。理論的には、企業は各タイプをいくつでも持つことができますが、実際には、それぞれを1つだけ持っています。したがって、私のモデルは次のようになります。
class Address < ActiveRecord::Base
belongs_to :business
end
class Business < ActiveRecord::Base
has_many :addresses
has_one :physical_address, :class_name => 'Address', :conditions => ["category = ?", "Physical"]
has_one :mailing_address, :class_name => 'Address', :conditions => ["category = ?", "Mailing"]
end
したがって、2つの「仮想」has_oneがあるので、自分で分離する作業をしなくても、どちらか1つ( business.physical_addressまたはbusiness.mailing_addressとして)に簡単にアクセスできます。
今、私は似たようなことをしようとしていますが、has_many:throughを使用しています。これが私の新しいシナリオです。私は、参加との単純な多対多の関係を持っています。Aには多くのJがあり、Bにも多くのJがあり、JはAとBの両方に属しているとします。ただし、AにはJまでのBも多数あります。したがって、a.bsとしてそれらにアクセスできます。
ただし、Bのエントリにも「カテゴリ」があります。したがって、上記のBusiness / Addressの例と同様に、 Aに「仮想」のhas-one / many-through関係を設定したいので、 Bをカテゴリ別に手動で区切る必要はありません。私はこのようなことを試みました(Aがcategory ='Type 1'のBを1つだけ持っていると仮定します):
class A < ActiveRecord::Base
has_many :js
has_many :bs, :through => js
has_one :b_type1, :class_name => 'B', :through => :js, :conditions => ["category = ?", "Type 1"]
end
ただし、Aを検索すると、結果のオブジェクトにはb_type1プロパティが含まれていません。
私がやろうとしていることをすることさえ可能ですか?どんな助けでも大歓迎です。
編集:これをAdobe Flexフロントエンドにシリアル化する必要があります(RestfulXフレームワークを使用)。このスレッドによると、@ Andrewが以下に提案するように、メソッドだけを使用することはできません。結果として得られるオブジェクトは、多大な労力を費やさないと適切にシリアル化されないためです。