【问题标题】:rails 3 how to find_or_create_by method, how to set additional attributes on the new objectrails 3 如何 find_or_create_by 方法,如何在新对象上设置附加属性
【发布时间】:2012-01-13 17:12:20
【问题描述】:

这发生在 Approval 模型中。 Approval 具有 :email 的属性。所以说 self.email 是调用 Approval 类的对象及其 email 属性。enter code here

def associate_correct_user
    new_user = User.find_or_create_by_email self.email do |u|
      u.invite!
end

如果我在这里创建一个用户,我需要传递另外两个属性(名字和姓氏)。这些属性需要从另一个模型电子邮件中提取,self.email 已经对其进行了验证。

这就是我的想法:

def associate_correct_user
    new_user = User.find_or_create_by_email self.email do |u|
       user = Email.find_by_email(self.email)
       u.first_name = user.first_name
       u.last_name = user.last_name
      u.invite!
end

这会创建用户,但不会为这个新用户设置 first_name 和 last_name 属性...

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3


    【解决方案1】:

    在创建用户时显示您的 log/development.log 行。可能 first_name 和 last_name 是受保护的属性。 这里有一个 find_or_create_by http://api.rubyonrails.org/classes/ActiveRecord/Base.html#label-Dynamic+attribute-based+finders 的例子 它使用不同的语法。

    User.find_or_create_by_name('Bob', :age => 40) { |u| u.admin = true }
    

    【讨论】:

    • 嗯,这不是 find_or_Create_by 的重点吗? IT 使用正确的电子邮件保存用户,只是没有为其设置第一个/最后一个属性。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多