artificemm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2008-Mar-27 00:00 UTC
Double has_many help
I''m a total newbie on this, and I''m learning at baby steps, I am really excited from what I''ve learned with Ruby on Rails, but I have hit a wall here, I hope someone can help me to figure this out. I''m trying to implement what I think is a simple relation between 3 kinds of data: Machine, Kind, Product - Machine can have many Kinds (I used HABTM and a join table, and used check boxes in the view, ready, no problems in here) - Product(s) must have one Kind (Used has_many and belongs_to, using a select_tag for the view, no trouble here) Now what is giving me some headaches: -Machine must list the Product(s) that share the same Kind <== How can I implement this? any suggestions or ideas? I tried has_many => through, but it seems that I am misunderstanding the method. class Machine < AR has_and_belongs_to_many :kinds has_many :products, :through => :kinds ??? end All errors are very explicit telling me that I''m missing a column, but the thing here is, how can I call the same Kind on two different things, how can I call Products that have the same Kind as Machine? Thank you. Roberto. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
If you want to use has_many :through, the trouble with that is, it
expects a has_many, not a habtm association to go through.
so, you need to concretise your join tables to use it...
class Kind < AR
end
class MachineKind < AR
# attributes: id, machine_id, kind_id
end
class Kind < AR
has_many :machine_kinds
has_many :kinds, :through => :machine_kinds
end
class Machine < AR
has_many :machine_kinds
has_many :kinds, :through => :machine_kinds
def products
kinds.map{|kind| kind.product}.uniq
end
end
the "products" method inside the Machine class should solve your other
issue, however don''t try to use it like an association (ie trying to
run the method machine.products.build where machine is a Machine
instance, for example - this won''t work)
It all depends what you want to do with products once you have them.
Julian.
On 27/03/2008, at 11:00 AM, artificemm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
wrote:
>
> I''m a total newbie on this, and I''m learning at baby
steps, I am
> really excited from what I''ve learned with Ruby on Rails, but I
have
> hit a wall here, I hope someone can help me to figure this out.
>
> I''m trying to implement what I think is a simple relation between
3
> kinds of data:
> Machine, Kind, Product
>
> - Machine can have many Kinds (I used HABTM and a join table, and used
> check boxes in the view, ready, no problems in here)
> - Product(s) must have one Kind (Used has_many and belongs_to, using a
> select_tag for the view, no trouble here)
>
> Now what is giving me some headaches:
>
> -Machine must list the Product(s) that share the same Kind <== How can
> I implement this? any suggestions or ideas?
>
> I tried has_many => through, but it seems that I am misunderstanding
> the method.
>
> class Machine < AR
> has_and_belongs_to_many :kinds
> has_many :products, :through => :kinds ???
> end
>
> All errors are very explicit telling me that I''m missing a column,
but
> the thing here is, how can I call the same Kind on two different
> things, how can I call Products that have the same Kind as Machine?
>
> Thank you.
> Roberto.
> >
--~--~---------~--~----~------------~-------~--~----~
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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
artificemm-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org
2008-Mar-27 04:49 UTC
Re: Double has_many help
Thank you for your answer Julian. All your method is very clear, I''ll be trying it as soon as possible (really tired right now) but in general, yes I was going for a Machine.products.find(:all) to list all possible Products compatible with Machine, and since both Machine and Product get the same Kind(from the same "kinds" table) I thought they were related in some way I just couldn''t find out how to do that. Anyway, I''ll try your suggestion, and dropping some lines here for more help. ;) Thank you very much. Regards. Roberto. --~--~---------~--~----~------------~-------~--~----~ 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-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---