当`where`在ActiveRecord :: Base中工作时,不能使用`find_by`方法

时间:2014-11-11 18:17:48

标签: ruby-on-rails activerecord

我有这样的方法,效果很好。

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

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

我不知道为什么find_by在这里不起作用。如果你告诉我什么是错的,我将非常感激。

1 个答案:

答案 0 :(得分:2)

在Rails 4中引入了

find_by方法。如果您使用的是Rails 3.x或更低版本,请使用:find_by_<attribute_name>代替:

find_by_twitter_id(twitter_id)

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

find_or_create_by_twitter_id(twitter_id)