ruby-on-rails - 当 find 涉及单个属性但 create 涉及多个属性时实现 find_or_create_by

标签 ruby-on-rails activerecord

在我的 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/

相关文章:

mysql - 如何从男性和女性性别表中获取用户数量

ruby-on-rails - 如何在 Rails 中定义 postgres 函数以及它们的范围和生命周期是什么?

javascript - 如何在 session 之间保持类切换?

ruby-on-rails - 我更新了 ruby​​ gems,现在到处都收到解析树错误和弃用警告!

ruby-on-rails - 没有 ActiveRecord rails 6 的 ActiveStorage

ruby-on-rails - 在 Rails 中使用数据库列别名时出现 NoMethodError

sql - Ruby on Rails - 迁移、唯一列和索引(使用数组)

ruby-on-rails - 从 Controller 调用模块函数 (NoMethodError)

ruby-on-rails - 生成一个以字符串字段为主键的模型

ruby-on-rails - rails 方式 : Formatting Value Before Setting it in the Model?