【问题标题】:simple_form and hstore basic functionalitysimple_form 和 hstore 基本功能
【发布时间】:2013-07-08 09:23:53
【问题描述】:

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

我必须这样做:

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

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

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

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

有什么想法吗?谢谢。

【问题讨论】:

    标签: ruby-on-rails simple-form ruby-on-rails-4 form-for hstore


    【解决方案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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多