在我的 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
最佳答案
find_or_create_by获取一个仅在创建时应用的 block 。它将根据您提供的属性查找记录,如果没有找到,将创建一个具有您指定的 block 属性的记录。
在你的情况下,这看起来像:
user = User.find_or_create_by(email: recipient) do |user|
user.password: Devise.friendly_token.first(6),
user.confirmed_at: DateTime.now
end
关于ruby-on-rails - 当 find 涉及单个属性但 create 涉及多个属性时实现 find_or_create_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46250587/