ハック方法
私はこれ以上のネイティブな方法があります願っています。 I私のモデルにこのメソッドを追加しました:f.general_validation_errors
は次のようになり許可するFormtasticに
- if @my_model.general_validation_errors.any?
.errors
%ul
- @my_model.general_validation_errors.each do |error_message|
%li= error_message
あるいは、モンキーパッチ:
# Validation errors not tied to a specific property. For instance,
# "end date must be on or before start date" (neither property is
# wrong individually, but the combination makes the model invalid)
# @return [Array] of error message strings
def general_validation_errors
general_errors = []
general_error_keys = errors.keys.reject do |error|
# Throw away any errors that match property names
self.send(:properties).map(&:name).include?(error) || error == :error
end
general_error_keys.each do |key|
general_errors << self.errors[key]
end
general_errors.flatten
end
フォームの上部には、私はこれを行うことができます
# Let Formtastic forms use f.general_validation_errors to display these (if any)
module Formtastic
module Helpers
module ErrorsHelper
def general_validation_errors
unless @object.respond_to?(:general_validation_errors)
raise ArgumentError.new(
"#{@object.class} doesn't have a general_validation_errors method for Formtastic to call (did you include the module?)"
)
end
if @object.general_validation_errors.any?
template.content_tag(:div, class: 'errors') do
template.content_tag(:ul) do
content = ''
@object.general_validation_errors.each do |error|
content << template.content_tag(:li) do
error
end
end
content.html_safe
end
end
end
end
end
end
end
それとも、単にspecial_overall_soundness' 'のように、名前であなたの特別なエラーを選ぶことができ中であなたのビューで
flash.now[:errors]
。 'validates_with_method'のドキュメントは、一度に一つのプロパティ/メソッドでそれを使うことを奨励しています。 – ujifgcまた、DataMapper 1.3でコードを中断したい場合は、 'Model.validators.contexts [:default] .select {| k | k.kind_of? DataMapper :: Validations :: MethodValidator} ' – ujifgc
@ujifgc - 私は**バリデーションを一度に**宣言していますが、私はそれらをユーザーのために1か所にまとめたいと思います。フォームフィールドの横にフィールド固有のエラーをリストしています。私はこれらの他のものを全て一番上のリストに入れておきたい。また、 'Model.validators.context [:default] .select {| k | k.kind_of?(DataMapper :: Validations :: MethodValidator) 'は、フィールド固有のものとそれ以外のものを区別せず、すべてのバリデーションを返します。それぞれに' field_name'プロパティがありますが、 '一般'バリデーションにはnilはありません。それは私を助けません。 –