2

我可以让 hstore 与 simple_form 一起工作,但除了最基本的功能(保存)之外的所有功能都不起作用。验证消息不会显示在各个字段上......所有 hstore 字段都奇怪地按要求显示,即使值本身也不会正确填充,除非手动设置。

我必须做这样的事情:

<%= f.simple_fields_for :phones do |phone| %>
    <%= phone.input :agent, :input_html => { :value => @artist.phones['agent'] } %>
<% end %>

我必须将 simple_fields_for 用于 hstore 哈希,它可以正确保存,但在编辑时,如果不使用 input_html 设置值,则不会填充这些值。它将每个字段标记为必填项,并且根本不会出现验证错误(它们确实有效)。

像这样使用 hstore 验证(从下面的答案添加):

validates_hstore :emails do
  validates_format_of [:agent,:artist], :with => /@/, :allow_blank => true
end

有任何想法吗?谢谢。

4

1 回答 1

1

您可以在此处找到如何为 Hstore 添加一些自定义验证的示例:

https://gist.github.com/rf-/2322543

module HstoreValidation
  def validates_hstore(field, &block)
    validation_class = Class.new do
      include ActiveModel::Validations

      def self.name
        '(validations)'
      end

      def initialize(data)
        @data = data
      end

      def read_attribute_for_validation(attr_name)
        @data[attr_name]
      end
    end
    validation_class.class_eval &block

    validate do
      validator = validation_class.new(self[field])

      if validator.invalid?
        validator.errors.each do |attr, text|
          self.errors.add(attr, text)
        end
      end
    end
  end
end

但至于如何让验证与简单表单一起工作,我不确定。

于 2013-07-18T18:29:36.773 回答