Hello Jaryl, thanks for the reply,

habtm is equivalent to has_many :through. just that the join table is not an
entity by itself, this I know :)

So, I will try to explain through an example:

Let's say we have a products table:

| id | name | price |
|  1 |     a   |  2.50 |
|  2 |     b   |  1.50 |

A suppliers table

| id | name |
|  1 |  s_a  |
|  2 |  s_b  |

So the idea is: A product may be supplied by many different suppliers. So,
indeed, it is a has_and_belongs_to_many relationship. The thing is, the
relationship by itself defines the type of the supplier (if it's either a
vendor or a manufacturer), since we have:

products_suppliers table:
| id | supplier_id | product_id | supplier_type |
| 1  |       1         |     1          |   "vendor"      |
| 2  |       1         |      2         | "manufacturer"|

So, in tis case, supplier s_a is a "vendor" of product a and a
"manufacturer" of product b.

Product < ActiveRecord::Base
  has_many :products_suppliers
  has_many :suppliers, :through => :products_suppliers
end

Supplier < ActiveRecord::Base
 has_many :products_suppliers
 has_many :products, :through => :products_suppliers
end

ProductsSupplier < ActiveRecord::Base
 belongs_to :product
 belongs_to :supplier
end


So let's take this code

p = Product.find(1)


What I need is a specific products_suppliers related to specific combo of
(supplier_id,product_id) keys, so I can get the supplier_type data related
to this product+supplier. However, I the has_many relationship in Supplier
reaturns all the products_suppliers that has supplier_id == the id of this
supplier -- To get the specific products_supplier I would also need the id
of the product that owns this supplier, but I can't get it. So, the first
thing I though was something like has_one :through. That's why I said, a
has_one relationship through a link table. The thing is, I need the
product_id that owns this supplier from the supplier model. I might as well
just leave AR and do some raw SQL, or maybe use sql :select statemente in
the association to fetch the type from the link table into the association.

Does that make sense?

Thanks,

Marcelo.



On Mon, Apr 6, 2009 at 9:47 PM, Jaryl Sim <quantum.crus...@gmail.com> wrote:

>
> I couldn't really get your question, but I think that what you are
> trying to do here is to create a many to many relationship.
>
> Rails actually provides the has_and_belongs_to_many association for
> this very purpose, which should help you with what you are asking (I
> think).
>
>
> http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to-many
>
> On Apr 7, 6:01 am, Marcelo de Moraes Serpa <celose...@gmail.com>
> wrote:
> > Actually the question would be better put this way:
> >
> >  Having a has_one association via a link table (in this case
> > products_supplier).
> >
> > Thanks.
> >
> > On Mon, Apr 6, 2009 at 3:41 PM, Marcelo de Moraes Serpa <
> celose...@gmail.com
> >
> > > wrote:
> > > Let's say we have the following models:
> >
> > > Product < ActiveRecord::Base
> > >  has_many :products_suppliers
> > >  has_many :suppliers, :through => :products_supplier
> >
> > > Supplier < ActiveRecord::Base
> > >  has_many :products_suppliers
> > >  has_many :products, :through => :products_supplier
> >
> > > ProductsSupplier < ActiveRecord::Base
> > >  belongs_to :supplier
> > >  belongs_to :product
> > > end
> >
> > > Let' say we have this data in the products_suppliers table:
> >
> > > | supplier_id |  product_id |
> > > |      1          |       2         |
> > > |      1          |       1         |
> > > |      2          |       2         |
> > > |      2          |       1         |
> >
> > > So when I do this:
> >
> > > @suppliers = Product.find(1).suppliers, it will return an array with
> the
> > > suppliers with id 1 and 2.
> >
> > > Let's say I do this:
> >
> > > @supplier = @suppliers[0] #Which is the supplier with id = 1, the one
> > > fetched from the (supplier_id = 1, product_id = 2) record in the
> > > products_suppliers table. Ok, now I got a single instance of a
> supplier.
> > > **What I want is to get the product_id it was associated with in the
> > > products_suppliers table.** (product_id = 2), might be missing
> something
> > > simple, but I can't seem to find a way to do that.
> >
> > > Any help appreciated!
> >
> > > Thanks,
> >
> > > Marcelo.
> >
>

--~--~---------~--~----~------------~-------~--~----~
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@googlegroups.com
To unsubscribe from this group, send email to 
rubyonrails-talk+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to