ActiveRecord似乎在错误的direciton中生成查询连接

时间:2015-11-30 22:50:09

标签: ruby-on-rails activerecord

如果这是一个重复的问题,我道歉。我在一个简单的搜索查询中尝试表达这个问题时遇到了很多麻烦。

我设置了两个模型:

class LedgerLine < ActiveRecord::Base
  has_one :category
end

class Category < ActiveRecord::Base
  belongs_to :ledger_line
end

这些表是健全的,并且存在于数据库中,正如我所期望的那样。

但是当我在ledger_lines控制器中使用这个命令时......

@ledger_lines = LedgerLine.joins(:category).all

我收到此错误...

SQLException: no such column: categories.ledger_line_id: 
SELECT "ledger_lines".* FROM "ledger_lines" INNER JOIN "categories" ON
"categories"."ledger_line_id" = "ledger_lines"."id"

我的目的是将外部联接ledger_lines留给ledger_lines.category_id上的类别。但是发出的查询似乎试图做相反的事情,试图在categories_ledger_id(不存在)上将类别连接到ledger_lines。

当我自己在数据库工具中编写sql并执行它时,一切都很好,没有错误。这是我手写的SQL:

select *
FROM ledger_lines AS l 
LEFT OUTER JOIN categories AS c
ON l.category_id = c.id

我是ActiveRecord / Rails的新手,所以我想知道我是否完全误解了AR加入概念。我正在关注Rails指南中的示例和文档,看起来这是正确的方法。

思考?愤怒的叫声?明智的答案?

1 个答案:

答案 0 :(得分:1)

看起来你混淆了这些联想。由于ledger_lines表具有category_id外键,因此类别关联应为belongs_to:

class LedgerLine < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :ledger_lines
end