Forum: Ruby on Rails How to associate one model from 2 models

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
161c0829c95d759f4dc0e0b71f712109?d=identicon&s=25 Rémi Gagnon (rgagnon)
on 2008-12-04 22:05
I know, I have probably a wrong design.  Just need your point of view on
that.

Here is

Police has many products
Police has many transactions
Products has many transactions

I need to get a transaction with the combination of police and product.

Is it feasible to defines associations to do that.  I know that's weird
a bit. I think I'm missing a model in between.

Rémi
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2008-12-04 22:40
(Received via mailing list)
On Dec 4, 3:05 pm, Rémi Gagnon <rails-mailing-l...@andreas-s.net>
wrote:
>
> Is it feasible to defines associations to do that.  I know that's weird
> a bit. I think I'm missing a model in between.
>
> Rémi
> --
> Posted viahttp://www.ruby-forum.com/.

I think the design is fine, actually.  If I understand correctly, your
transactions table has columns police_id and product_id (and others).

If so, you can find a transaction this way:

Transaction.find_by_police_and_product(police, product)

This will return the first one that matches.  You can also add further
conditions, ordering, etc. as with any other find.

Jeff

www.purpleworkshops.com
161c0829c95d759f4dc0e0b71f712109?d=identicon&s=25 Rémi Gagnon (rgagnon)
on 2008-12-05 14:26
Thank you.  But is there a way to navigate that relationship, not by a
find?

> I think the design is fine, actually.  If I understand correctly, your
> transactions table has columns police_id and product_id (and others).
>
> If so, you can find a transaction this way:
>
> Transaction.find_by_police_and_product(police, product)
>
> This will return the first one that matches.  You can also add further
> conditions, ordering, etc. as with any other find.
>
> Jeff
>
> www.purpleworkshops.com
8217faf2bfdfa7daf10135d41ddd421e?d=identicon&s=25 Jeff Cohen (jeff)
on 2008-12-05 21:59
(Received via mailing list)
On Dec 5, 7:26 am, Rémi Gagnon <rails-mailing-l...@andreas-s.net>
wrote:
> Thank you.  But is there a way to navigate that relationship, not by a
> find?

Not sure I understand the question exactly... you can use has_many and
belongs_to to help navigate:

class Police
 has_many :transactions
 has_many :products
end

class Transaction
 belongs_to :police
 belongs_to :product
end

class product
 has_many :transactions
 belongs_to :police
end

For example:

p = Product.find(1)

You can do:

p.transactions
p.transactions.first.police

Similarly

t = Transaction.last
t.products
t.products.first.police

Or maybe I misunderstood your question?

Jeff

www.purpleworkshops.com
161c0829c95d759f4dc0e0b71f712109?d=identicon&s=25 Rémi Gagnon (rgagnon)
on 2008-12-06 03:00
Thanks Jeff,

I was not very clear in my question.

I would like to do Police.transaction but in conjunction with Product.

But anyway today we redesign our model to make it cleaner.

Thanks for your help.

Rémi


Jeff Cohen wrote:
> On Dec 5, 7:26�am, R�mi Gagnon <rails-mailing-l...@andreas-s.net>
> wrote:
>> Thank you. �But is there a way to navigate that relationship, not by a
>> find?
>
> Not sure I understand the question exactly... you can use has_many and
> belongs_to to help navigate:
>
> class Police
>  has_many :transactions
>  has_many :products
> end
>
> class Transaction
>  belongs_to :police
>  belongs_to :product
> end
>
> class product
>  has_many :transactions
>  belongs_to :police
> end
>
> For example:
>
> p = Product.find(1)
>
> You can do:
>
> p.transactions
> p.transactions.first.police
>
> Similarly
>
> t = Transaction.last
> t.products
> t.products.first.police
>
> Or maybe I misunderstood your question?
>
> Jeff
>
> www.purpleworkshops.com
This topic is locked and can not be replied to.