0

すべてのフォーム タグに隠しフィールドを追加することは可能ですか? 私は次の方法でそれをやろうとしています:

module ActionView::Helpers::FormTagHelper

  def form_tag(url_for_options = {}, options = {}, &block)
    html_options = html_options_for_form(url_for_options, options)
    if block_given?
      f = form_tag_in_block(html_options, &block)
    else
      f = form_tag_html(html_options)
    end
    hidden_f = ActiveSupport::SafeBuffer.new "<input name='n' type='hidden' value='v' /><\/form>"
    f.gsub!(/<\/form>/, hidden_f)
    f
  end

end

しかし、サーバーはエラーを示しています:

ActionView::Template::Error (Could not concatenate to the buffer because it is not html safe.):

どうすればいいですか?

4

2 に答える 2

3

、、、および非表示フィールドextra_tags_for_formを追加するために使用されるメソッドを再定義する方が簡単な場合があります。このようなものが機能する可能性があります:_methodutf8authenticity_token

module ActionView::Helpers::FormTagHelper
  alias_method :orig_extra_tags_for_form, :extra_tags_for_form

  def extra_tags_for_form(html_options)
    orig_tags = orig_extra_tags_for_form(html_options)
    orig_tags << "<input name='n' type='hidden' value='v' /><\/form>".html_safe
  end
end

このアドバイスにはプライベートメソッドの再定義が含まれるため、Railsをアップグレードするときは必ず慎重にテストする必要があります。

于 2012-09-28T16:10:17.143 に答える
1

試してみてください

module ActionView::Helpers::FormTagHelper
  def form_tag(url_for_options = {}, options = {}, &block)
    html_options = html_options_for_form(url_for_options, options)
    if block_given?
      f = form_tag_in_block(html_options, &block)
    else
      f = form_tag_html(html_options)
    end
    hidden_f = ActiveSupport::SafeBuffer.new "<input name='n' type='hidden' value='v' /><\/form>"
    f.gsub!(/<\/form>/, hidden_f)
    f.html_safe
  end
end

gsub!文字列を HTML の危険性で汚染します。

于 2012-09-28T15:46:11.273 に答える