ruby-on-rails – Rails:无法嵌套content_tag
发布时间:2020-12-17 02:44:57 所属栏目:百科 来源:网络整理
导读:我编写了一个Rails助手来创建一个嵌套的 HTML列表.但是,这不能正确呈现.我做错了什么? 帮手 content_tag :ul do [1,2].each do |x| content_tag(:li,x) content_tag :ul do ['a','b'].each do |y| content_tag(:li,y) content_tag :ul do ['i','ii'].each d
我编写了一个Rails助手来创建一个嵌套的
HTML列表.但是,这不能正确呈现.我做错了什么?
帮手 content_tag :ul do [1,2].each do |x| content_tag(:li,x) content_tag :ul do ['a','b'].each do |y| content_tag(:li,y) content_tag :ul do ['i','ii'].each do |z| content_tag(:li,z) end end end end end end 预期产出 <ul> <li>1</li> <ul> <li>a</li> <ul> <li>i</li> <li>ii</li> </ul> <li>b</li> <ul> <li>i</li> <li>ii</li> </ul> <li>2</li> <ul> <li>a</li> <ul> <li>i</li> <li>ii</li> </ul> <li>b</li> <ul> <li>i</li> <li>ii</li> </ul> </ul> </ul> 实际输出 <ul></ul> 解决方法
这是解决方案:
content_tag(:ul) do [1,2].map do |x| content_tag(:li,x) << content_tag(:ul) do ['a','b'].map do |y| content_tag(:li,y) << content_tag(:ul) do ['i','ii'].map do |z| content_tag(:li,z) end.join('').html_safe end end.join('').html_safe end end.join('').html_safe end 问题是您必须在每个content_tag块的末尾返回一个HTML安全字符串: # returns <li>asd</li> content_tag('li') { 'asd' } # returns <ul><li>asd</li></ul> content_tag('ul') { content_tag('li') { 'asd' } } # returns [1,2] [1,2].each{ |x| content_tag('li',x) } # returns ["<li>1</li>","<li>2</li>"] [1,2].map{ |x| content_tag('li',x) } # returns "<li>1</li><li>2</li>" not marked as HTML safe,# because `join` generates a new string [1,x) }.join('') # returns "<li>1</li><li>2</li>" marked as HTML safe [1,x) }.join('').html_safe # returns "<ul><li>1</li><li>2</li></ul>" content_tag('ul') do [1,x) }.join('').html_safe end # returns "<ul><li>1</li><li>2</li></ul>" content_tag('ul') do content_tag('li') { 'asd' } # this is ignored,since it is not returned [1,x) }.join('').html_safe end # returns "<ul><li>asd</li><li>1</li><li>2</li></ul>" content_tag('ul') do content_tag('li') { 'asd' } << [1,x) }.join('').html_safe end (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |