Ruby on rails 当find涉及单个属性但create涉及多个属性时,实现find\u或create\u by

Ruby on rails 当find涉及单个属性但create涉及多个属性时,实现find\u或create\u by,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,在我的Rails应用程序中,我希望通过他们的电子邮件找到一个用户,或者如果该用户不存在,则使用该电子邮件以及其他一些属性创建一个用户。有没有比下面的代码更简单的方法来实现这一点,比如使用find\u或\u create\u by def set_user if self.user = User.find_by(email: recipient) else self.user = User.create(email: recipient,

在我的Rails应用程序中,我希望通过他们的电子邮件找到一个用户,或者如果该用户不存在,则使用该电子邮件以及其他一些属性创建一个用户。有没有比下面的代码更简单的方法来实现这一点,比如使用
find\u或\u create\u 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方法是否返回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
获取仅在创建时应用的块。它将根据您提供的属性查找记录,如果未找到记录,将使用您指定的块属性创建一条记录

在您的情况下,这看起来像:

user = User.find_or_create_by(email: recipient) do |user|
  user.password: Devise.friendly_token.first(6),
  user.confirmed_at: DateTime.now
end
user = User.find_or_create_by(email: recipient) do |user|
  user.password: Devise.friendly_token.first(6),
  user.confirmed_at: DateTime.now
end