不显示嵌套属性的必填字段的错误消息

时间:2016-03-17 16:02:08

标签: ruby-on-rails nested-forms nested-attributes simple-form-for

在我的情况下,我有一个客户端有很多任务(需要:detail和:completion_date字段。)。 我一直在构建一个嵌套的模型表单,如下所示:

= simple_form_for @client do |f|
  = f.simple_fields_for :tasks do |task|
    = task.input :detail
    = task.input :completion_date
  = f.submit

如果提交的表单没有空的'detail'或'completion_date'字段,表单将重新呈现,但不会显示任何错误消息。

我一直试图寻找解决方案。没有提到关于验证嵌套对象属性的失败。

希望有人可以提供帮助! 谢谢,

1 个答案:

答案 0 :(得分:4)

默认情况下,Rails不验证关联的对象。您需要使用validates_associated macro

示例:

class Client < ActiveRecord::Base
  has_many :tasks
  accepts_nested_attributes_for :tasks
  # Do not add this on both sides of the association
  # as it will cause infinate recursion.
  validates_associated :tasks
end

class Task < ActiveRecord::Base
  belongs_to :client
  validates_presence_of :name
end
@client = Client.create(tasks_attributes: [ name: "" ])
@client.errors.messages
=> {:"tasks.name"=>["can't be blank"], :tasks=>["is invalid"]}

关联记录的错误不会在父级中聚合。要显示子记录的错误,您需要遍历它们并调用errors.full_messages。

@client.tasks.each do |t|
  puts t.errors.full_messages.inspect
end