我有2个模型 - User
和Alias
,其中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
。
我怎样才能完成我想做的事?
答案 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)