,如果你愿意重写一个私人Rails的方法,你可以达到你想要的结果。如果你这样做,当升级到更新私有方法逻辑的未来版本的Rails时,你冒着导致问题的风险。由于根据HTML5规范,
正如Chris Heald所说,我们将itemscope添加到BOOLEAN_ATTRIBUTES,然后重写标签助手以输出不带值的布尔属性。 (以下tag_options方法是从Rails的修改/ ActionPack的3.0.7 - 未来的读者应该复制当代tag_options代码,然后让if BOOLEAN_ATTRIBUTES.include?(key)行之后的变化。)
module ActionView
module Helpers
module TagHelper
BOOLEAN_ATTRIBUTES.merge(['itemscope', :itemscope])
private
def tag_options(options, escape = true)
unless options.blank?
attrs = []
options.each_pair do |key, value|
if BOOLEAN_ATTRIBUTES.include?(key)
attrs << key.to_s if value
elsif !value.nil?
final_value = value.is_a?(Array) ? value.join(" ") : value
final_value = html_escape(final_value) if escape
attrs << %(#{key}="#{final_value}")
end
end
" #{attrs.sort * ' '}".html_safe unless attrs.empty?
end
end
end
end
end
现在,您可以更新您的看法:
content_tag(:div, "somecontent", :itemscope => true, :item_type => "http://data-vocabulary.org/Breadcrumb"
FWIW,我存储扩展到现有的类在例如lib/extensions/action_view.rb;这些扩展名由config/initializers/extensions.rb加载,其中包括:
Dir[File.join(Rails.root, 'lib', 'extensions', '*.rb')].each {|f| require f}