Rails:before_create一个模型,首先创建第二个模型

时间:2014-04-10 01:33:28

标签: ruby-on-rails

我有2个模型 - UserAlias,其中User has_many :aliases
创建User时,对于已存在的任何Alias,它必须是唯一的 创建User后,他们还会以Alias的名称保存User

以下是我的User.rb型号

的代码
validates_associated :aliases   # bring in any validations from relationship models

before_create :create_alias

def create_alias
  a = self.aliases.new
  a.alias = username
  return a.save
end

alias模型验证为validates_uniqueness_of :alias

我的理论是,在创建User模型之前,请创建一个Alias模型,如果失败,那么创建User模型也会失败。

然而,当它失败时,铁轨正在爆炸 它没有正确地执行validates_associated

我怎样才能完成我想做的事?

2 个答案:

答案 0 :(得分:0)

检查这个http://guides.rubyonrails.org/association_basics.html#has-many-association-reference,您可以在定义关联时使用:autosave和:validate选项,这样您就可以删除validates_associated和before_create回调并让rails处理这些操作

has_many :aliases

编辑:我认为问题是你在验证后分配新的别名!因此,当您分配验证后的用户名

时,您必须正确构建新的别名
def username=(value) #custom setter for username
  aliases.build(alias: value)
  write_attribute(:username, value)
end

现在别名将在验证和user.valid之前出现?将运行别名'验证时也有价值

答案 1 :(得分:0)

这在模型中一定不可能。至少用设计......

为了解决这个问题我只是放弃了尝试并将配置移动到控制器上,如下所示:

@user.aliases.build(:name => @user.username)