不能使用"find_by"方法,而"where"在 ActiveRecord::Base 中工作



我有一个这样的方法,它运行良好。

class User < ActiveRecord::Base
    def self.find_or_create_from_twitter_id(twitter_id)
        user = where(twitter_id: twitter_id).first
        user ||= create_from_twitter_id(twitter_id)
    end
end

然后我把where(...).first改为find_by,因为我认为这两个表达式基本相同。

def self.find_or_create_from_twitter_id(twitter_id)
    user = find_by(twitter_id: twitter_id)
    user ||= create_from_twitter_id(twitter_id)
end

但是,当我尝试创建User时,会出现undefined method `find_by' for #<Class:0x007fbb2b674970>错误。

我不知道为什么find_by在这里不起作用。如果你告诉我出了什么问题,我将不胜感激。

find_by方法在Rails4中引入。如果您使用的是Rails3.x或更低版本,请使用:find_by_<attribute_name>代替:

find_by_twitter_id(twitter_id)

但是,还有另一种方法可以通过传递给它的属性来查找和创建,如果它符合您的需求,您可以使用它:

find_or_create_by_twitter_id(twitter_id)

最新更新