我有一个问题,我的ActiveRecord :: Relation不工作我有3个Db的用户,游戏,成就他们之间定义的关系是这样的
用户
has_many :games
游戏
belongs_to :user
has_many :achievements
成就
belongs_to :game
问题在于我试图打电话
Game.where(:appid => game["appid"]).achievements.new
它让我和错误说
undefined method `achievements' for #<Game::ActiveRecord_Relation:0x730f9f8>
我在Ruby on Rails 4.1.8上运行,我不知道为什么会发生这种情况(我的Achievements表中有belongs_to:game,index:true列,我不能想到为什么它不是工作)
答案 0 :(得分:1)
您在这里获得了一个关联:
Game.where(:appid => game["appid"])
...这是作为一个对象数组实现的(即使sql没有返回任何记录,那么它仍然是一个数组,虽然它是空的)。
您需要选择其中一个......可能是第一个,如下所示:
Game.where(:appid => game["appid"]).first.achievements.new
或者您可以浏览值:
Game.where(:appid => game["appid"]).each { |game| game.achievements.new }
或其他一些。
答案 1 :(得分:0)
可能你应该选择一个型号
Game.where(:appid => game["appid"]).first
然后获得关系模型
.achievements.new
答案 2 :(得分:0)
答案是例外。 #where返回ActiveRecord_Relation,而不是游戏,即使关系中只有一个游戏。所以你真的有一个可枚举的。即:
chrome.webNavigation.onBeforeNavigate.addListener()
chrome.webRequest.onBeforeRedirect.addListener()
如果您只想要符合条件的第一款游戏,可以使用find_by
puts Game.where(:appid => game["appid"]).first.achievements.new
但我不确定这是你在找什么