4

我有一个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

然后,在使用formtastic的active_admin中,我呈现错误消息At least one image is required,其中: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

这呈现为:

错误输出示例

图片 至少需要一张图片

如何使其渲染:至少需要一张图像

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

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

4

2 回答 2

3

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

改变这个

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
于 2013-01-23T19:24:13.273 回答
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

于 2016-11-22T12:16:01.780 回答