class LineItem < ActiveRecord::Base
belongs_to :order
end
class Order < ActiveRecord::Base
has_many :line_items
end
my_line_item = LineItem.find(:zipcode => "12345")
Order.find_by_line_item(my_line_item) # doesn't work
Order.find_by_line_item_id (my_line_item) # does work
I was surprised by this, because it seems to force me to make reference
to the id field of the line item, rather than referring to the LineItem
as a class or type in the Order.findxxx statement.
Am I misunderstanding something or missing a trick?
Thanks!!
-- Pito
--
Posted via http://www.ruby-forum.com/.
Probably not explaining this clearly enough (I blame the distillery
masters at Lagavulin), but:
find_by_line_item fails - my_line_item is an instance of the class (an
object) that does not have a 'line_item' attribute you indicated, it
*is* a LineItem
find_by_line_item_id works - rails infers the id attribute when you pass
an object (my_line_item), and in this case you've provided enough
information to tell rails which attribute to use...
I suppose you could mod the logic for find to include your syntax...
Wish I was there! Which of their Beer is available in the US?
>
> find_by_line_item fails - my_line_item is an instance of the class (an
> object) that does not have a 'line_item' attribute you indicated, it
> *is* a LineItem
It kind of does, in that Order has_many :line_items, no? And so that's
an ActiveRecord method on Order called line_items?
By the way, my_order.find_by_line_item fails with "no such method", not
just by returning [].
I wonder if my_order.find_by_line_items would work?
I think you are missing a trick. Once you have my_line_item, to get
the item's order just do
my_line_item.order
There is no need to use find at all.
Colin