2016-07-17 7 views
0

Я думал, что пытаюсь сделать что-то простое, и немного смущен, почему он не работает - в основном, найти все объекты «Game», содержащие конкретное сообщение (или сообщение).Почему предложение where в ассоциации смотрит на «object_id» и как я могу написать предложение where правильно?

$ 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.

+0

Что такое ассоциация у вас есть между '' Game' и модели Message'? –

+0

Можете ли вы разместить свою модель «Игра»? – oreoluwa

+0

Arup, я упомянул ассоциацию в последней строке - сообщение об объекте 'has_one'. – GlyphGryph

ответ

2

Это нормально! Вы можете использовать эту ассоциацию только в обратном порядке. Вы можете попробовать Message.where(game: nil), но если вы будете получать игры, вы тучными использовать это:

Game.joins(:message).where(message: Message.first) 
Смежные вопросы