rails 3如何find_or_create_by方法,如何在新对象上设置其他属性

时间:2012-01-13 17:12:21

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

这发生在Approval模型中。 Approval具有以下属性:email。因此,说self.email使用其电子邮件属性调用Approval类的Object。enter code here

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

如果我在这里创建用户,我需要传递另外两个属性(first_name和last_name)。这些属性需要从另一个模型电子邮件中提取,其中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属性设置为此新用户...

1 个答案:

答案 0 :(得分:0)

创建用户时显示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 }