0

我使用 simple_form 来显示一个电子邮件字段:

= f.simple_fields_for :user do |f|
 = f.input :email, wrapper: :append, pattern: false do
   = f.input_field :email, type: "email"

不知何故,它总是设置输入字段的模式,但我想改用电子邮件输入字段的 HTML5 验证。

有没有办法防止 simpleform 设置模式?

4

3 回答 3

2

您可以猴子修补 SimpleForm:

module SimpleForm
  module Components
    module Pattern
      def pattern
        # Deactivated for good:
        #input_html_options[:pattern] ||= pattern_source
        nil
      end
    end
  end
end

现在,模式将不再从验证中生成。您需要手动将模式添加到需要模式的每个输入。例子:

= f.input :name, pattern: "[a-zA-Z]+"
于 2013-10-23T23:27:18.297 回答
1

有同样的问题......找到了一种解决方法,但它有点hacky

添加

:pattern => ".*"

像这样到你的领域

<%= f.input_field :email, :autofocus => true, :pattern => ".*", :class => "span12", :placeholder => t('placeholder.email') %>
于 2013-05-22T09:35:41.063 回答
0

我宁愿在应用程序目录中的某个位置创建一个 string_input.rb 文件......可能在一个名为“inputs”的文件夹中,然后有这个代码

class StringInput < SimpleForm::Inputs::StringInput
  def input
    input_html_options[:class] = "input-xlarge #{input_html_options[:class]}"
    unless string?
     input_html_classes.unshift("string")
     input_html_options[:type] ||= input_type if html5?
    end
    input_html_options[:pattern] = nil

    add_size!
    @builder.text_field(attribute_name, input_html_options)
  end
end

这将对所有模式属性产生影响,因此无需显式放入。当然,如果您想指定输入类型是否为电子邮件,您也可以添加条件。

快乐编码:)

于 2013-09-10T17:57:22.720 回答