为什么关联中的where子句会查看“object_id”,以及如何正确编写where子句?

时间:2016-07-17 17:00:26

标签: ruby-on-rails activerecord

我以为我正在尝试做一些简单的事情,并且为什么它不起作用而感到有点困惑 - 基本上,找到包含特定消息(或没有消息)的所有“游戏”对象。

$ Game.where(:message => Message.first)

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: games.game_id: SELECT "games".* FROM "games" WHERE "games"."game_id" = 1

$ Game.where(:message => nil)

ActiveRecord::StatementInvalid: SQLite3::SQLException: no such column: games.game_id: SELECT "games".* FROM "games" WHERE "games"."game_id" = 1

$ Game.where(:message => nil).to_sql

 => "SELECT \"games\".* FROM \"games\" WHERE \"games\".\"game_id\" = 1" 

我真的不明白这里有什么回复给我 - 为什么要检查games.game_id属性?我如何实际运行查询以获取具有特定消息的游戏或根本没有消息?

游戏对象“has_one”消息,其“属于”游戏对象。关系本身工作正常,我只是无法弄清楚如何做where子句。

1 个答案:

答案 0 :(得分:2)

这很正常!你只能反向使用这种情况。你可以试试 Message.where(game: nil),但是如果你想要游戏,你可以使用它:

Game.joins(:message).where(message: Message.first)