Rails 3:为什么`errors` Hash对于嵌套模型是空的(所有错误都在父模型中)

时间:2010-12-06 18:06:06

标签: ruby-on-rails-3

我正在使用Devise并且模型设置如下:

User
    has_one :profile
Profile
    belongs_to :user
    has_one :address
Address 
    belongs_to :profile

为了测试,我在表单上引起了错误(它是一个嵌套的表单,使用了所有3个模型)。这是产生的错误哈希(@user.errors hash):

{
:email=>["can't be blank"], 
:password_confirmation=>[], 
:password=>["can't be blank"],
:"profile.first_name"=>["can't be blank","is too short (minimum is 1 characters)"]
:"profile.address.street"=>["can't be blank"], 
}

所有错误都是预期的,但哈希的密钥格式是意外的(:"profile.address.street") - 我原以为每个嵌套模型的errors哈希会包含该模型的错误?

我在@user.profile.errors哈希里面检查过,那是空的!

如何将嵌套模型特定错误添加到嵌套模型中的相关errors哈希中?

更新

我破解了一个解决方案here。对此也有疑问,所以解决方案不会作为这个问题的答案发布:)

2 个答案:

答案 0 :(得分:1)

不久前进入这个并不得不做一些代码来自己解决这些问题。 Rails默认不支持它--Ryan Daigle触及它here a bit

答案 1 :(得分:1)

试试这个:

@user.profile.valid?
@user.profile.errors