I figured out how to do it:
class Item < AR::B
has_many :sub_deps,
:class_name => ''Dep'',
:foreign_key_name => ''super_item_id'',
:source => deps
has_many :super_deps,
:class_name => ''Dep'',
:foreign_key_name => ''sub_item_id'',
:source => deps
has_many :sub_items, :through => :deps
has_many :super_items, :through => :deps
end
class Dep < AR::B
belongs_to :sub_item, :class_name => ''Item'', :foreign_key
=>
''sub_item_id''
belongs_to :super_item, :class_name => ''Item'',
:foreign_key =>
''super_item_id''
End
If anyone has a more elegant solution let me know. In particular it
would be nice not having to specify :class_name => ''Dep''
when using
:source. It was also unintuitive to me that I needed two has_many
aliases for :deps but at least now I see why.
Regards,
- Jacob
> -----Original Message-----
> From: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> [mailto:rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org] On Behalf
Of
> Refstrup, Jacob Grundtvig
> Sent: Thursday, January 04, 2007 12:02 PM
> To: rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
> Subject: [Rails] :has_many :through problems...
>
>
> Hi,
>
> I''m fairly new to RoR and I''m having some problems with
> :has_many and :through and it''s quite possible that I''m
doing
> something very wrong...
>
> The model - consists of items and the their dependencies.
> Items can depend on each other; this is coded through the
> table ''deps'' with keys sub_item_id and super_item_id that
> refers to the items.id.
>
> E.g.
>
> deps
> id,super_item_id,sub_item_id
> 1 , 1, 2
> 2 , 1, 3
> 3 , 2, 3
>
> This means that item 1 has two sub items (namely 2 & 3), item
> 3 has two super items (namely 1 & 2).
>
> I use the following model:
>
> class Item < AR::B
> has_many :deps
> has_many :sub_items, :through => :deps
> has_many :super_items, :through => :deps end
>
> class Dep < AR::B
> belongs_to :sub_item, :class_name => ''Item'',
:foreign_key
> => ''sub_item_id''
> belongs_to :super_item, :class_name => ''Item'',
:foreign_key
> => ''super_item_id''
> end
>
> Whenever I try to access the sub or super items I get an sql
> error (e.g.
> for item 1):
>
> ''Unknown column ''deps.item_id'' in
''where clause'': SELECT
> items.* FROM items INNER JOIN deps ON items.id =
> deps.sub_item_id WHERE ((deps.item_id = 1))
>
> It would seem that the last ((...)) should have been
> ((deps.super_item_id = 1)). But I''m not quite sure of how I
> would have told the reflection of that key name (super_item_id).
>
> I''ve tried any different variations of this without any luck.
>
> Any clues or hints?
>
> Regards,
> - Jacob
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---