我是有這個問題,我到底使用Ben Lee這裏給出的解決方案:
validates associated with model's error message
本說:
您可以編寫自己的自定義驗證的基礎上,內置驗證器的代碼。
查找validates_associated的源代碼,我們看到它使用「AssociatedValidator」。該源代碼是:
module ActiveRecord
module Validations
class AssociatedValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
return if (value.is_a?(Array) ? value : [value]).collect{ |r| r.nil? || r.valid? }.all?
record.errors.add(attribute, :invalid, options.merge(:value => value))
end
end
module ClassMethods
def validates_associated(*attr_names)
validates_with AssociatedValidator, _merge_attributes(attr_names)
end
end
end
end
所以,你可以用這個作爲一個例子來創建一個氣泡錯誤信息像這樣的自定義的驗證:
module ActiveRecord
module Validations
class AssociatedBubblingValidator < ActiveModel::EachValidator
def validate_each(record, attribute, value)
(value.is_a?(Array) ? value : [value]).each do |v|
unless v.valid?
v.errors.full_messages.each do |msg|
record.errors.add(attribute, msg, options.merge(:value => value))
end
end
end
end
end
module ClassMethods
def validates_associated_bubbling(*attr_names)
validates_with AssociatedBubblingValidator, _merge_attributes(attr_names)
end
end
end
end
你可以把這個代碼在初始化,像/initializers/associated_bubbling_validator.rb
。
最後,你會驗證像這樣:
class User < ActiveRecord::Base
validates_associated_bubbling :account
end
注:上面的代碼是完全未經測試,但如果它不完全工作,它是希望足以讓你在正確的軌道上
來源
2012-11-27 21:44:07
Leo
我完全同意,這將是非常希望的。任何人都可以通過這個問題的聰明解 – sandstrom 2010-11-04 19:38:40