Rails中的简单关系查询

时间:2012-11-21 23:53:23

标签: sql ruby-on-rails activerecord

我们说我有以下表格:

      product              transaction
------------------     ------------------
| id |   name    |     | id |  product  |            
------------------     ------------------
| 1  | Product A |     | 1  |     2     |
| 2  | Product B |     | 2  |     3     |
| 3  | Product C |     | 3  |     2     |
------------------     ------------------

现在,让我们说我想列出transaction表,但我想显示产品名称而不是产品ID。

在原始SQL中,我会做这样的事情:

SELECT product.name FROM transaction, product WHERE transaction.product = product.id

我很难弄清楚如何使用Rails'活动记录查询接口。我确信这对你们的Rails专家来说是微不足道的。

2 个答案:

答案 0 :(得分:2)

如果你想解决它" Rails方式":

首先:将交易中的列product更改为product_id,并且表格名称应为复数,否则您必须添加例如set_table_name 'transaction'在模型中,你会错过很多Rails'期货,如果你不改变它。

添加/更改这些模型:

class Product < ActiveRecord::Base
  has_many :transactions
end

class Transaction < ActiveRecord::Base
  belongs_to :product
end

如果您坚持使用列名&#34;产品&#34;您必须将belongs_to更改为:

  belongs_to :product, :foreign_key => 'product'

但这有点难看

最后,使用这个:

Transaction.includes(:product)

或者,如果您只想要拥有产品的人

Transaction.joins(:product)

注意: 我不记得确切,但我认为我在使用&#34;交易&#34;在某些应用程序中作为表名。其他人也许知道这一点。

答案 1 :(得分:1)

transaction.joins('LEFT OUTER JOIN product ON transaction.id = product.id')