Koh*_*ohl 1 ruby-on-rails nested-attributes nested-form-for
<%= 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 %>
Run Code Online (Sandbox Code Playgroud)
上面是我的表单的一个片段,我可以访问文章的验证,即:author, :title 的validates_presence 但是我无法访问我为nested_attributes 设置的验证,这些验证恰好是照片。关于如何显示错误消息的任何想法?
我们以前有过这个工作
有以下三点需要考虑:
所有这些都将使您能够控制或访问来自父模型的验证错误消息。我认为问题在于您的模型是“解耦”的,使它们独立 - 这意味着除非您这样做,否则它们的错误消息将不可用
这就是我要做的
验证关联
#app/models/article.rb
class Article < ActiveRecord::Base
has_many :photos
validates_associated :photos
accepts_nested_attributes_for :photos
end
Run Code Online (Sandbox Code Playgroud)
我没有愤怒地使用它 - 它应该整理来自关联模型的错误消息,使您能够通过@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
Run Code Online (Sandbox Code Playgroud)
似乎您也不会收到任何消息!(我会把它留在里面给你一个选择)
——
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
Run Code Online (Sandbox Code Playgroud)
这使您能够调用应填充errors对象的数据。
| 归档时间: |
|
| 查看次数: |
4300 次 |
| 最近记录: |