其他 外建关联 build 问题

Jsiguo · 2011年12月16日 · 最后由 Jsiguo 回复于 2012年02月04日 · 2776 次阅读

大家好,请问我在 calss User { 。。。。 after_create :set_profile def set_profile @profile = self.build_profile end } 而 在 models 对 profile 加了如下验证 validates_numericality_of(:birth_month,:only_integer => true,:greater_than =>0,:less_than =>13 ,:message => '1-12') validates_presence_of :birth_year, :birth_month, :birth_day #不能为空验证 validates_numericality_of :birth_day #不能为非数字验证

此时外键就不能创建了 就是说不能创建 profiles 了 如果不加验证就能顺利创建 profiles 我想加验证请问有什么方法解决

补充关联关系都建好了

你的发帖和 http://ruby-china.org/topics/501#reply3 有同样的问题,看那边我的回帖

关于这个问题: 不能创建是因为你 Profile 里面有了验证,而 set_profile 里面调用 build_profile 创建是个空的东西。 你为什么非得要在这个时候生成一个 profile ?

@Jsiguo.明显,这是一个注册的东东。。明显你的逻辑有问题,你是想让用户注册好以后,登录后再去修改自己的信息。首先,你验证了字段不为空,就不能那么创建。要么你就是在注册的时候要求用户填写这些字段,然后用嵌套属性来提交. 原生的 form 方式可以看看这个东西 http://cn.asciicasts.com/episodes/196-nested-model-form-part-1 http://cn.asciicasts.com/episodes/197-nested-model-form-part-2

还有一个 gem 可以更好的解决问题: https://github.com/ryanb/nested_form

不知道你说的是不是在 save User 的时候 同时也验证 profile 如果是的话可以用 validates_associated :profile

#3 楼 @bony 注册一般情况不都是只填 user 表 (email,username 和 password) 就行了吗,等注册成功在修改自己的 profile 就行了吗 这样感觉逻辑没问题吧

#5 楼 @Jsiguo 校验加 allow_blank => true

#6 楼 @Rei 基本能实现了 但要是 birth_year, :birth_month, :birth_day 这些字段要必填就不能实现了 呵呵

#7 楼 @Jsiguo 问题解决了需要加上:birth_year, :birth_month, :birth_day,:on => :update 更新的时候验证不为空就行了 学习了 呵呵

需要 登录 后方可回复, 如果你还没有账号请 注册新账号