<%= form_for @article , :html => {:multipart=> true} do |f| %>
<% if @article.errors.any? %>
<ul>
<% @article.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
<% end %>
上面是我的表单的片段,我可以访问文章的验证,即validates_presence:author,:title 但是我无法访问我为我的nested_attributes设置的验证,这些验证恰好是照片。关于如何显示错误消息的任何想法?
答案 0 :(得分:4)
我们之前已经有了这个工作
有三件事需要考虑:
所有这些都使您能够控制或访问来自父模型的验证错误消息。我认为问题在于,当你的模型“解耦”时,使它们独立 - 这意味着它们的错误信息将无法使用,除非你这样做
这就是我要做的事情
验证关联
#app/models/article.rb
class Article < ActiveRecord::Base
has_many :photos
validates_associated :photos
accepts_nested_attributes_for :photos
end
我没有在愤怒中使用它 - 它应该整理来自相关模型的错误消息,使您能够通过@article
对象显示错误。我不确定这是否会起作用,但似乎Rails核心开发团队推荐:
当模型与其他模型有关联时,您应该使用此帮助程序 模型,他们也需要验证。当你试图保存你的 对象,有效吗?将调用每个相关对象。
-
拒绝
您可以在reject_if
上使用accepts_nested_attributes_for
方法。这提供了自己的消息,但仅用于关联数据(IE不基于子模型中的验证):
#app/models/article.rb
class Article < ActiveRecord::Base
...
accepts_nested_attributes_for :photos, reject_if: {|attributes| attributes[:x].blank? }
end
看来你也不会收到任何消息! (我会留下来给你一个选择)
-
<强> Inverse_Of 强>
这是我们设法获取关联错误消息以显示的方式。它基本上使您的模型可以相互访问数据 - 允许您直接引用它们:
#app/models/article.rb
class Article < ActiveRecord::Base
has_many :photos, inverse_of: :article
end
#app/models/photo.rb
class Photo < ActiveRecord::Base
belongs_to :article, inverse_of :photos
end
这使您能够调用其数据,应该填充errors
对象。
答案 1 :(得分:1)
照片模特:
Class Photo < ActiveRecord::Base
belongs_to :article
validates :author, presence: true
end
文章模型:
class Article < ActiveRecord::Base
has_many :photos
accepts_nested_attributes_for :photos
validates_presence_of :author
end