未定义的方法`take'用于#<activerecord :: querymethods :: wherechain:0x00000107609598> </activerecord :: querymethods :: wherechain:0x00000107609598>

时间:2014-04-25 16:37:51

标签: ruby-on-rails ruby ruby-on-rails-4

我正在尝试选择a.blocked?(p)返回false的所有配置文件!

但是我收到了错误。

在模型

中的方法中
p = self.find_by_email(email)

all.find_by { |a| a.blocked?(p) }.order('random()')

错误

undefined method `take' for #<ActiveRecord::QueryMethods::WhereChain:0x00000107609598>

1 个答案:

答案 0 :(得分:0)

find_by不会占用块,而是采用散列,数组或字符串的形式。请参阅文档:http://api.rubyonrails.org/classes/ActiveRecord/FinderMethods.html#method-i-find_by

如果您无法在SQL中复制blocked?,那么您必须在Ruby中进行过滤,如:

all.find_all { |a| a.blocked?(p) }.shuffle

因为它在Ruby而不是SQL中进行过滤和排序,所以它会更慢。