在我的Rails应用程序中,我希望通过电子邮件找到用户,或者如果用户不存在,则使用该电子邮件创建一个用户以及其他一些属性。有没有比下面的代码更笨重的方法来做到这一点,也许使用find_or_create_by
?
def set_user
if self.user = User.find_by(email: recipient)
else
self.user = User.create(email: recipient,
password: Devise.friendly_token.first(6),
confirmed_at: DateTime.now)
end
end
答案 0 :(得分:1)
find_or_create_by采用仅在create上应用的块。它将通过您提供的属性查找记录,如果找不到,将使用您指定的块属性创建一个。
在您的情况下,这将是:
user = User.find_or_create_by(email: recipient) do |user|
user.password: Devise.friendly_token.first(6),
user.confirmed_at: DateTime.now
end
答案 1 :(得分:0)
def set_user
user = User.find_or_initialize_by(email: recipient)
user.update( password: Devise.friendly_token.first(6),
confirmed_at: DateTime.now) if user.new_record?
user
end
答案 2 :(得分:0)
始终找到用户,询问您的搜索是否存在或者查找方法返回为nil,如果返回nil则创建用户
def set_user
user = User.find_by(email: recipient)
unless user
user = User.create(email: recipient,
password: Devise.friendly_token.first(6),
confirmed_at: DateTime.now)
end