2017-07-07 51 views
0

我目前有一个简单的验证问题。 保存我的模型时,运行验证。ruby​​ on rails - 嵌套类中的验证显示失败时的错误屏幕

用户有多个问题,问题有多个答案

这证实语句是我加入了表类的一部分

validates :answers, length: { maximum: 6 } 

答案将在一个更新的,所以我提出这样的问题来验证本身

validates_associated :user_question 

当答案的选择数超过6 然而,instea此验证被正确失败回到我的表格。它向我显示了一个很大的错误信息,说明验证失败。

我想在窗体上显示这些问题,以便用户知道什么是错的。

表单的其他验证错误按预期显示。只是由于某种原因导致问题的嵌套属性。

这是正在显示

ActiveRecord::RecordInvalid 

Validation failed: User question is invalid 

在以下行错误:@ user.attributes =(user_params)

这的确是时刻时,它验证(我认为),但它太抽象了,看看究竟是什么错误(如果有什么错误的话)。

任何帮助表示赞赏。

+0

请发布错误本身。你确定“验证失败”,而不是验证是不正确的,并导致错误被提出? – engineersmnky

+0

感谢您的评论,我更新了问题。 它确实指定它失败 - 验证失败:用户问题无效 –

回答

0

怎么样,如果添加此自定义的验证,这是你的question.rb内(类)

validate :maximum_six_answer 

private 

def maximum_six_answer 
    if answers.size > 6 
    errors.add :base, "sorry maximum six answers" 
    end 
end 
+0

这给了我相同的结果。我也尝试过使用自定义方法。但是,我没有使用:base名称。难道这是因为用户被保存而弄乱了吗?由于此问题表单是用户表单中的“fields_for”。 –

0

validates_associated声明会做两件事情:在命名关联

  1. 运行验证,填充该关联对象上的errors
  2. 在关联本身上记录错误,以便验证对象也将被视为无效。

所以你的问题为什么无效的细节应该从@user.user_question.errors可用。

+0

非常感谢,我会尝试一下,稍后再尝试一些结果。 –

+0

因此,看起来像,当我运行这样的验证并直接更改用户问题的连接表时,验证会正确传递,因为我可以在视图上显示错误。但是,这意味着validates_associated使它强制invalidrecord错误,而不是在视图上显示它。到目前为止,这是我的理论。 –