如果这是一个重复的问题,我道歉。我在一个简单的搜索查询中尝试表达这个问题时遇到了很多麻烦。
我设置了两个模型:
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指南中的示例和文档,看起来这是正确的方法。
思考?愤怒的叫声?明智的答案?
答案 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