개인 레일스 방법을 재정의하려는 경우 원하는 결과를 얻을 수 있습니다. 이렇게하면 개인 메서드 논리를 업데이트하는 이후 버전의 Rails로 업그레이드 할 때 문제가 발생할 위험이 있습니다. <div itemscope ...>
및 <div itemscope="itemscope" ...>
은 HTML5 사양에 따라 유효하므로 아래 변경을 수행하는 데는 거의 보상이 없습니다. 내가 이것을 할 수있는 유일한 이유는 당신이 HTML 코드 스타일에 완전히 집착하고 있다는 것입니다.
Chris Heald가 말했듯이 itemscope
에 BOOLEAN_ATTRIBUTES
을 추가 한 다음 값이없는 부울 특성을 출력하도록 태그 도우미를 재정의합니다. (다음 tag_options 방법은 레일에서 수정/ActionPack 3.0.7 - 미래의 독자가 if BOOLEAN_ATTRIBUTES.include?(key)
라인 후 변경 후 현대 tag_options 코드를 복사해야합니다.)
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
; 이 확장은 에 의해로드되며 다음으로 구성됩니다.
Dir[File.join(Rails.root, 'lib', 'extensions', '*.rb')].each {|f| require f}
Bummer. 좋은 대답, 크리스. 감사! – dhulihan