【问题标题】:Make semantic_errors render the exact error-message使语义错误呈现确切的错误消息
【发布时间】:2013-01-21 16:35:51
【问题描述】:

我有一个模型Camping,其中has_manyImages。露营至少需要一张图片:

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

然后,在使用formtasticactive_admin 中,我使用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

这呈现为:

图片 至少需要一张图片

如何使其呈现:至少需要一张图片

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

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

【问题讨论】:

    标签: activeadmin formtastic


    【解决方案1】:

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

    改变这个

    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
    

    【讨论】:

      【解决方案2】:

      如果你想使用这样的自定义消息你可以添加新方法到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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多