我有一个这样的方法,它运行良好。
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)