Question

I have these models (psuedocode):

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

I want to make a scope that allows me to access tiles from an order. something like Order#tiles so that I can do things like this in controllers:

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

How can I construct such a scope? (or is there another technique I should use?)

Was it helpful?

Solution

The associations you have don't work together. I think you might be looking for something like this:

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
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top