我们说我有以下表格:
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专家来说是微不足道的。
答案 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')