在我的情况下,我有一个客户端有很多任务(需要: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'字段,表单将重新呈现,但不会显示任何错误消息。
我一直试图寻找解决方案。没有提到关于验证嵌套对象属性的失败。
希望有人可以提供帮助! 谢谢,
答案 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