【问题标题】:How to add an empty attribute in rails form_for tag?如何在rails form_for标签中添加一个空属性?
【发布时间】:2013-08-09 05:18:11
【问题描述】:

为了使基础验证工作,我必须像这样将“data-abide”属性添加到表单标签中:

<form data-abide>

如何使用 rails 中的 form_for 标签来做到这一点?

完整的 Rails 代码:

<%= form_for @member, html: {class: "custom"} do |f| %>

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-4


    【解决方案1】:

    在 rails form_for 语法中,您可以执行以下操作:

    :html => {"data-abide" => ''}
    

    我也将 abide 与表单助手一起使用,这种方式效果很好。

    【讨论】:

      【解决方案2】:

      我在 form_for 助手中使用它,如下例所示:

      <%= form_for @user, html: { :"data-abide" => "" } do |f| %>
      

      这将生成以下 html,并且 Abide 将起作用:

      <form accept-charset="UTF-8" action="/users" class="new_user" data-abide="" id="new_user" method="post" novalidate="novalidate">
      

      【讨论】:

        【解决方案3】:

        &lt;%= form_tag '', 'data-abide' =&gt; '' %&gt;...&lt;% end %&gt;&lt;%= tag :form, 'data-abide' =&gt; '' do %&gt;&lt;% end %&gt;

        是否有理由为此使用 rails 助手?使用&lt;form data-abide&gt;不是更容易吗?

        【讨论】:

        • 我正在为模型创建表单。向模型中添加数据。
        • 'data-abide' => '' 不起作用 :( 外部 html:,它不会生成任何东西。在 html 内部: ( ''}, 'data-abide' => '' do |f| %>),会生成data-abide=""
        【解决方案4】:

        将此辅助方法添加到应用程序帮助器中

        def tag_options(options, escape = true)
              unless options.blank?
                attrs = []
                options.each_pair do |key, value|
                  if key.to_s == 'data' && value.is_a?(Hash)
                    value.each do |k, v|
                      unless v.is_a?(String) || v.is_a?(Symbol) || v.is_a?(BigDecimal)
                        v = v.to_json
                      end
                      v = ERB::Util.html_escape(v) if escape
                      attrs << %(data-#{k.to_s.dasherize}="#{v}")
                    end
                  elsif !value.nil?
                    final_value = value.is_a?(Array) ? value.join(" ") : value
                    final_value = ERB::Util.html_escape(final_value) if escape
                    attrs << %(#{key}="#{final_value}")
                  end
                end
                " #{attrs.sort * ' '}".html_safe unless attrs.empty?
              end
            end
        

        然后使用 {'abide' => ''}) 做 |f| %>,这将产生html

        <form accept-charset="UTF-8" action="/members" class="new_member" data-abide="" id="new_member" method="post">
        

        【讨论】:

          【解决方案5】:

          Josh Lehmans 的回答帮助了我。这是表单的完整工作示例。

          <%= form_for @customer, html: {"data-abide" => ''} do |f| %>
              <%= f.text_field :name, placeholder: "Your name", :required => '' %>
              <%= content_tag(:small, "This field is required", class: "error") %>
          <% end %>
          

          【讨论】:

            【解决方案6】:

            尝试使用

            <% form_for @your_object, :html => {:data => {:abide => 'your-data-abide'}} do |f|%>
            

            【讨论】:

            • 它将创建 '
            • 我猜如果您必须在表单中放置任何属性,那么您需要为其添加一个值。
            • 我不明白这是这个问题的公认答案。
            • 我也是...无法理解这是多么空洞的内容。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-06
            • 2014-01-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-05-29
            相关资源
            最近更新 更多