Ruby on rails 未定义的方法`<<';对于#<;回答:ActiveRecord_关系:0x007fada31c7430>;
嗨,我创建了一个控制器游戏来显示问答游戏Ruby on rails 未定义的方法`<<';对于#<;回答:ActiveRecord_关系:0x007fada31c7430>;,ruby-on-rails,ruby,model,Ruby On Rails,Ruby,Model,嗨,我创建了一个控制器游戏来显示问答游戏 我被您试图附加到@answers结果的阻止-这是一个ActiveRecord关系,您无法将数据附加到该数组 将.添加到行末尾的a,在该行中设置@answers以允许附加到数组中 @answers = Answer.where.not(id: question.answer_id).limit(2).order("RANDOM()").to_a 您正试图附加到@answers结果-这是一个ActiveRecord关系,您无法将数据附加到该数组 将.添加
我被您试图附加到
@answers
结果的阻止-这是一个ActiveRecord关系,您无法将数据附加到该数组
将.添加到行末尾的a
,在该行中设置@answers
以允许附加到数组中
@answers = Answer.where.not(id: question.answer_id).limit(2).order("RANDOM()").to_a
您正试图附加到@answers
结果-这是一个ActiveRecord关系,您无法将数据附加到该数组
将.添加到行末尾的a
,在该行中设置@answers
以允许附加到数组中
@answers = Answer.where.not(id: question.answer_id).limit(2).order("RANDOM()").to_a
mtrolle的答案可能是正确的,但我怀疑为什么默认情况下,ActiveRecord::Relation
没有作为数组返回。(布罗伊斯塔泽在评论中也提到了这一点。)
我也注意到我的本地设置存在同样的问题,但这都是由于另一个问题造成的。我在这里分享这个,以防你也碰巧使用MySQL
Answer.where.not(id: question.answer_id).limit(2).order("RANDOM()")
返回一个ActiveRecord::Relation
对象。它转换为以下SQL:
SELECT `answers`.* FROM `answers` WHERE (id != ID) ORDER BY RANDOM() LIMIT 2
当我尝试在MySQL中运行相同的程序时,我得到:
ERROR 1305 (42000): FUNCTION database.RANDOM does not exist
显然MySQL没有RANDOM()
函数,而是使用
转换ActiveRecord
查询时,相应地向我返回了正确的数组:
Answer.where.not(id: question.answer_id).limit(2).order("RAND()")
mtrolle的答案可能是正确的,但我怀疑为什么默认情况下,ActiveRecord::Relation
没有作为数组返回。(布罗伊斯塔泽在评论中也提到了这一点。)
我也注意到我的本地设置存在同样的问题,但这都是由于另一个问题造成的。我在这里分享这个,以防你也碰巧使用MySQL
Answer.where.not(id: question.answer_id).limit(2).order("RANDOM()")
返回一个ActiveRecord::Relation
对象。它转换为以下SQL:
SELECT `answers`.* FROM `answers` WHERE (id != ID) ORDER BY RANDOM() LIMIT 2
当我尝试在MySQL中运行相同的程序时,我得到:
ERROR 1305 (42000): FUNCTION database.RANDOM does not exist
显然MySQL没有RANDOM()
函数,而是使用
转换ActiveRecord
查询时,相应地向我返回了正确的数组:
Answer.where.not(id: question.answer_id).limit(2).order("RAND()")
令人惊讶的是,默认情况下,这种关系将缺少的方法委托给委托给a
。那么为什么它在这种情况下失败了呢?好的,进行了一些深入的研究,似乎这种委托并不像只使用method\u missing
那么简单,因为有些方法需要委托给关系klass。委托逻辑可以在这里找到:@mtrolle I test withto_a
,它可以工作。为什么在其他代码上我们不使用它,而且它可以工作?令人惊讶的是,默认情况下,这种关系会将缺少的方法委托给委托给\u a
。那么为什么它在这种情况下失败了呢?好的,进行了一些深入的研究,似乎这种委托并不像只使用method\u missing
那么简单,因为有些方法需要委托给关系klass。委托逻辑可以在这里找到:@mtrolle I test withto_a
,它可以工作。为什么在其他代码上我们不使用这个,它可以工作?你的意思是我将RANDOM
更改为RAND
?但它再次破坏了我代码中的一个错误。这对你合适吗?你是说我把RANDOM
改成RAND
?但它再次破坏了我代码中的一个错误。这对你合适吗?