使semantic_errors呈现确切的错误消息

时间:2013-01-21 16:35:51

标签: activeadmin formtastic

我有Camping has_many的模型Images。露营需要至少一张图片:

class Camping < ActiveRecord::Base
  attr_accessible :images_attributes
  has_many :images
  validates_presence_of :images, :message => "At least one image is required"
  accepts_nested_attributes_for :images, :allow_destroy => true
 end

然后,在使用active_adminformtastic中,我使用f.semantic_errors呈现错误消息至少需要一个图片

ActiveAdmin.register Camping do
  form :html => { :multipart => true } do |f|
     f.semantic_errors :images
     #....
     f.inputs "Images" do
      f.has_many :images do |img|
        #....
      end
    end
    #....
  end
end

这呈现为:

Example output of error

图片至少需要一张图片

如何渲染:至少需要一张图片

f.semantic_errors :images更改为'f.semantic_errors(删除:图片)会使其无法渲染;完全没有错误。

注意:API documentation似乎暗示Formtastic总是将:attribute名称添加到错误中;但我不完全确定这段代码的工作原理。

2 个答案:

答案 0 :(得分:2)

如果要使用此类自定义消息,可以添加与对象状态相关的错误消息,而不是与特定属性相关

更改此

validates_presence_of :images, :message => "At least one image is required"

类似

   validate :should_have_images
   def should_have_images
       errors.add(:base, "At least one image is required") if images.blank?
   end

答案 1 :(得分:0)

如果您想使用此类自定义消息,可以向Formtastic::Helpers::ErrorsHelper添加新方法,如下所示

config/initializers/errors_helper.rb

创建新文件

将以下代码放入文件

module Formtastic
  module Helpers
    module ErrorsHelper
      def custom_errors(*args)
        return nil if @object.errors.blank?
        messages = @object.errors.messages.values.flatten.reject(&:blank?)
        html_options = args.extract_options!
        html_options[:class] ||= 'errors'
        template.content_tag(:ul, html_options) do
          messages.map do |message|
            template.content_tag(:li, message)
          end.join.html_safe
        end
      end
    end
  end
end

在activeadmin表单中使用 f.custom_errors代替f.semantic_errors *f.object.errors.keys