簡體   English   中英

如何在助手中嵌套 Rails 標簽?

[英]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>

最后一個跨度是空白的。 我怎樣才能得到這個工作?

這不起作用的原因是......我不完全確定。 concattag之間發生了一些奇怪的事情,這是肯定的:

: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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM