[英]How to nest Rails tag in a helper?
使用 Rails 6.1,嘗試將內容嵌套在輔助方法中:
tag.div do
concat tag.span 'Options: ', class: 'small'
concat tag.span do
doc.options.each do
concat option.title
end
end
end
我期待這會返回一個內部有兩個跨度的 div,第一個有“選項”字符串,第二個有所有選項的標題。 但這不起作用。 我結束了:
<div>
<span class="small">Options: </span>
<span></span>
</div>
最后一個跨度是空白的。 我怎樣才能得到這個工作?
這不起作用的原因是......我不完全確定。 concat
和tag
之間發生了一些奇怪的事情,這是肯定的:
:0> tag.div do
:1* tag.span { "A" }
:1> end
=> "<div><span>A</span></div>"
# But:
:0>tag.div do
:1* tag.span { "A" }
:1> tag.span { "B" }
:1> end
=> "<div><span>B</span></div>"
# But also:
:0> tag.div do
:1* concat tag.span { "A" }
:1> concat tag.span { "B" }
:1> end
=> "<div><span></span><span></span></div>"
:0> helper.tag.div do
:1* concat tag.span { concat "A" }
:1> concat tag.span { concat "B" }
:1> end
=> "<div><span>A</span><span>B</span></div>"
# For completeness:
:0> tag.div do
:1* concat tag.span "A"
:1> concat tag.span "B"
:1> end
=> "<div><span>A</span><span>B</span></div>"
也許更精通 Rails 的人可以更好地解釋它。 但我可以為您提供解決方案。
或者更確切地說,我不知道你想要實現什么,但你可以這樣做:
tag.div do
concat tag.span "A"
concat tag.span([1, 2, 3].join(" "))
end
這會給你<div><span>1 2 3</span></div>
。 您也可以完全取消 concat:
tag.div do
tag.span "A"
tag.span([1, 2, 3].join(" "))
end
但是,如果您希望每個title
都有自己的span
,那么您的做法是錯誤的:
:0> tag.div do
:1* concat tag.span "A"
:1> ["B", "C"].each { |c| concat tag.span c }
:1> end
=> "<div><span>A</span><span>B</span><span>C</span></div>"
最后; 沒有理由為這種 static html 使用助手; 這在 erb 或 haml 文件中會更好:
<span class="small">Options</span>
<% doc.options.each do |option| %>
<span><%= option.title %></span>
<% end %>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.