执行find_or_create_by时发现涉及单个属性,但创建涉及多个属性
问题描述:
在我的Rails应用程序我想通过他们的电子邮件找到一个用户,或者如果用户不存在,创建一个与该电子邮件以及一些其他属性。有没有比下面的代码更笨拙的方式来做到这一点,也许使用find_or_create_by
?执行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
答
find_or_create_by需要将应用块只有在创造。它会根据您提供的属性查找记录,如果找不到任何记录,将使用您指定的块属性创建一条记录。
在你的情况下,这看起来像:
user = User.find_or_create_by(email: recipient) do |user|
user.password: Devise.friendly_token.first(6),
user.confirmed_at: DateTime.now
end
答
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
答
总能找到用户,询问你的搜索存在或find方法返回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