5

就我而言,我有一个客户有很多任务(需要 :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

当提交的表单没有空的“详细信息”或“完成日期”字段时,表单会重新呈现,但不会显示任何错误消息。

我整天都在努力寻找解决方案。这些都没有提到嵌套对象的属性验证失败。

希望任何人都可以提供帮助!谢谢,

4

1 回答 1

6

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

例子:

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
于 2016-03-17T16:37:14.327 回答