2011-10-13 3 views
1

は、私はこれらのモデル(擬似コード)を持つ:ポリモーフィックな関連付けを走査するスコープを作成するにはどうすればよいですか?

class Order 
    has_many :line_items 
end 

class LineItem 
    belongs_to :purchasable, :polymorphic => true 
    belongs_to :order 
end 

class Tile 
    has_one :line_item, :as => :purchasable 
end 

は、私は私がオーダーからタイルにアクセスすることを可能にする範囲を作りたいです。 Order#tilesのようなもの、私はコントローラにこのようなことを行うことができるように:

my_order.tiles.new(...) 
my_order.tiles.find(params[:id]).update_attributes(...) 

どのように私は、このような範囲を構築することができますか? (または、私が使用すべき別のテクニックがありますか?)

答えて

2

あなたが持っている団体は協力していません。

class Order 
    has_many :line_items 
    has_many :tiles, :through => :line_items, :source => :purchasable, :source_type => "Tile" 
    ... 
end 

class LineItem 
    belongs_to :order 
    belongs_to :purchasable, :polymorphic => true 
    ... 
end 

class Tile 
    has_many :line_items, :as => :purchasable 
    ... 
end 
+0

実際のコードが反映されるように少し修正しました。私はいくつかの間違いがあった。私のリビジョンに基づいて、あなたは望みの範囲を作成する方法を知っていますか? –

+0

はい、私の答えから 'has_many:tiles、:through =>:line_items、:source =>:purchaseasable、:source_type =>「Tile」という行を見てください。それはあなたが望むことをすることができます。 –

+0

ああ、素晴らしい!私はそれがそれほど単純ではなかったことを理解していません –

関連する問題