我有这样的方法,效果很好。
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
在这里不起作用。如果你告诉我什么是错的,我将非常感激。
答案 0 :(得分:2)
find_by
方法。如果您使用的是Rails 3.x或更低版本,请使用:find_by_<attribute_name>
代替:
find_by_twitter_id(twitter_id)
但是,还有另一种方法可以通过传递给它的属性来查找和创建,如果它符合您的需要,您可以使用它:
find_or_create_by_twitter_id(twitter_id)