我有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_admin的formtastic中,我使用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
(删除:图片)会使其无法渲染;完全没有错误。
注意:API documentation似乎暗示Formtastic总是将:attribute
名称添加到错误中;但我不完全确定这段代码的工作原理。
答案 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