为什么这个工作正常:
Tag.create(game_id: 1, tagged: u)
但是这个:
tags = Tag.where(game_id: 1, tagged: u).includes(:tagged)
给出错误:
ActiveRecord::StatementInvalid: Mysql2::Error: Unknown column 'tags.tagged' in 'where clause': SELECT `tags`.* FROM `tags` WHERE `tags`.`game_id` = 1 AND `tags`.`tagged` = 1
顺便说一句,
u
是 ActiveRecord::Base
子类。
Tag
表结构:
create_table :tags, force: true do |t|
t.references :game
t.references :tagged_by
t.references :tagged
t.timestamps
end
尝试做
tags = Tag.includes(:tagged).where(game_id: 1, tagged_id: u.id)
发生错误是因为
Tag
模型没有为 tagged
定义关联。
要解决此问题,您可以在
belongs_to :tagged
模型中添加 Tag
关联,或者显式引用列名称作为 @pungoyal: 的答案
tags = Tag.where(game_id: 1, tagged_id: u.id).includes(:tagged)