How to associate one model from 2 models


#1

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


#2

On Dec 4, 3:05 pm, Rémi Gagnon removed_email_address@domain.invalid
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


#3

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


#4

On Dec 5, 7:26 am, Rémi Gagnon removed_email_address@domain.invalid
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


#5

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 C. wrote:

On Dec 5, 7:26�am, R�mi Gagnon removed_email_address@domain.invalid
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