0

假设我有以下表格:

      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 的 Active Record Query Interface 来完成。我相信这对你们那里的 Rails 专家来说是微不足道的。

4

2 回答 2

2

如果您想通过“Rails 方式”解决它:

product首先:将transactions中的column改为product_id,表名应该是复数,否则必须set_table_name 'transaction'在models中加上eg,不改会错过很多Rails的future。

添加/更改这些模型:

class Product < ActiveRecord::Base
  has_many :transactions
end

class Transaction < ActiveRecord::Base
  belongs_to :product
end

如果您坚持使用列名“产品”,则必须将其更改belongs_to为:

  belongs_to :product, :foreign_key => 'product'

但这有点难看

最后,使用这个:

Transaction.includes(:product)

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

Transaction.joins(:product)

注意:我不记得确切,但我认为我在某些应用程序中使用“事务”作为表名时遇到了问题。其他人可能知道这一点。

于 2012-11-22T01:08:03.763 回答
1
transaction.joins('LEFT OUTER JOIN product ON transaction.id = product.id')
于 2012-11-22T00:17:26.103 回答