我有三个模型,Event,Address和County,就像这样设置。
class Event < ActiveRecord::Base
has_one :address
accepts_nested_attributes_for :address, :allow_destroy => true
validates_presence_of :address
validates_associated :address
end
class Address < ActiveRecord::Base
belongs_to :county, :event
validates_presence_of :county
validates_associated :county
end
class County < ActiveRecord::Base
has_many :addresses
validates_presence_of :name, :allow_blank => false
end
它们都是通过一个表单创建的,它可以正常工作,直到验证它们为止。 如果该县留空,则我得到2个验证错误:
County can't be blank
Address is invalid
我可以理解为什么会这样,但只需要第一个验证错误“县不能为空”。
有关如何实现这一目标的任何想法吗?
答案 0 :(得分:5)
尝试以下方法:
validates_associated:county
validates_associated:地址
您可能想要反应该错误......
答案 1 :(得分:1)
您可以在视图中尝试此操作:
<% @event.errors.full_messages.each do |msg| %>
<% unless msg.end_with?('is invalid') %>
<li><%= msg %></li>
<% end %>
<% end %>
但是此代码不会在基本模型上更改errors.count
。
您可以清除erorrs
对象以防止控制器中的不必要错误(或其他):
@event.errors.values.each {|v| v.delete_if{|message| message == "is invalid"} }
此代码将生成此errors
哈希:
{:"address.county"=>["can't be blank"], :address=>[]}
因此@event.errors.count
将返回1
而不是2
。