How to associate one model from 2 models

1 view
Skip to first unread message

Rémi Gagnon

unread,
Dec 4, 2008, 4:05:41 PM12/4/08
to rubyonra...@googlegroups.com
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
--
Posted via http://www.ruby-forum.com/.

Jeff

unread,
Dec 4, 2008, 4:39:41 PM12/4/08
to Ruby on Rails: Talk
On Dec 4, 3:05 pm, Rémi Gagnon <rails-mailing-l...@andreas-s.net>
wrote:
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

Rémi Gagnon

unread,
Dec 5, 2008, 8:26:55 AM12/5/08
to rubyonra...@googlegroups.com
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

Jeff

unread,
Dec 5, 2008, 3:58:50 PM12/5/08
to Ruby on Rails: Talk
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

Rémi Gagnon

unread,
Dec 5, 2008, 9:00:46 PM12/5/08
to rubyonra...@googlegroups.com
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>

--
Posted via http://www.ruby-forum.com/.

Reply all
Reply to author
Forward
0 new messages