Вы можете достичь желаемого результата, если хотите переопределить встроенный метод Rails.Если вы сделаете это, вы рискуете вызвать проблемы при обновлении до будущих версий Rails, которые обновляют логику этого метода.Поскольку обе формы действительны в соответствии со спецификацией HTML5, внесение изменений, приведенных ниже, принесет очень мало пользы для HTML5.Единственные причины, по которым я могу подумать, это сделать, если вы полностью одержимы своим стилем кода HTML или используете доктайп HTML 4.(Следующий метод csrf_meta_tag изменен из Rails / ActionPack 3.0.7.)
module ActionView
# = Action View CSRF Helper
module Helpers
module CsrfHelper
# Returns a meta tag with the cross-site request forgery protection token
# for forms to use. Place this in your head.
def csrf_meta_tag
if protect_against_forgery?
%(<meta name="csrf-param" content="#{Rack::Utils.escape_html(request_forgery_protection_token)}">\n<meta name="csrf-token" content="#{Rack::Utils.escape_html(form_authenticity_token)}">).html_safe
end
end
end
end
end
Я также переопределил помощник по тегам (изменив параметр открытия на значение по умолчанию true вместо false), чтобы помощники форм не делали это.выводить самозакрывающиеся теги.
module ActionView
module Helpers
module TagHelper
def tag(name, options = nil, open = true, escape = true)
"<#{name}#{tag_options(options, escape) if options}#{open ? ">" : " />"}".html_safe
end
end
end
end
FWIW, я храню расширения для существующих классов, например, lib/extensions/action_view.rb
;эти расширения загружаются config/initializers/extensions.rb
, который состоит из:
Dir[File.join(Rails.root, 'lib', 'extensions', '*.rb')].each {|f| require f}