如何创建 HTML 标签并将其放置在现有 HTML 标签中,并在助手中使用 content_tag?
How do I create an HTML tag and place it within an existing HTML tag with content_tag in a helper?
我有一个 @profile
has_many positions
。 HTML 版本如下所示:
<h3>Defensive Midfield</h3>
<div class="alternative-positions">
<small>Attacking Midfield</small><br />
<small>Right Midfield</small>
</div>
然而,我正在做的是创建一个助手来抽象这个视图逻辑,所以我在我的 profile_helper.rb
.
中放了一堆 content_tags
规则如下:
- 当个人资料只有 1 个位置时,它会进入
h3
标签。
- 当有2个时,第一个进入
h3
,第二个进入small
,在div.alternative-positions
.
- 当有 3 个时,跟随 #1 & #2 然后将第三个位置放在现有
div.alternative-positions
. 中新创建的 <small>
中
1 和 2 很简单,我可以用这段代码做到这一点:
def player_positions(profile)
profile.positions.each_with_index do |index, position|
if index == 0
content_tag(:h3, position.position_type)
else
content_tag(:div, content_tag(:small, position.position_type), class: "alternative-positions")
end
end
end
在我看来是这样称呼的:
<%= player_positions(@profile) %>
然而,我遇到的问题是第三个。
我不太确定如何 select div,并确保新创建的 small
标签和内容嵌套在现有 div
中。
我该如何实现?
我建议单独处理列表中的第一个(即不属于每个子句的一部分)例如:
def player_positions(profile)
position_str = ""
position_str << content_tag(:h3, profile.positions.first.position_type) if profile.positions.size >= 1
if profile.positions.size >= 2
# this is the surrounding div for all other positions
position_str << "<div class='alternative-positions'>"
profile.positions[1..-1].each_with_index do |index, position|
position_str << content_tag(:small, position.position_type)
end
position_str << "</div>"
end
position_str
end
或类似(注意:未检查拼写错误或错误)
我有一个 @profile
has_many positions
。 HTML 版本如下所示:
<h3>Defensive Midfield</h3>
<div class="alternative-positions">
<small>Attacking Midfield</small><br />
<small>Right Midfield</small>
</div>
然而,我正在做的是创建一个助手来抽象这个视图逻辑,所以我在我的 profile_helper.rb
.
content_tags
规则如下:
- 当个人资料只有 1 个位置时,它会进入
h3
标签。 - 当有2个时,第一个进入
h3
,第二个进入small
,在div.alternative-positions
. - 当有 3 个时,跟随 #1 & #2 然后将第三个位置放在现有
div.alternative-positions
. 中新创建的
<small>
中
1 和 2 很简单,我可以用这段代码做到这一点:
def player_positions(profile)
profile.positions.each_with_index do |index, position|
if index == 0
content_tag(:h3, position.position_type)
else
content_tag(:div, content_tag(:small, position.position_type), class: "alternative-positions")
end
end
end
在我看来是这样称呼的:
<%= player_positions(@profile) %>
然而,我遇到的问题是第三个。
我不太确定如何 select div,并确保新创建的 small
标签和内容嵌套在现有 div
中。
我该如何实现?
我建议单独处理列表中的第一个(即不属于每个子句的一部分)例如:
def player_positions(profile)
position_str = ""
position_str << content_tag(:h3, profile.positions.first.position_type) if profile.positions.size >= 1
if profile.positions.size >= 2
# this is the surrounding div for all other positions
position_str << "<div class='alternative-positions'>"
profile.positions[1..-1].each_with_index do |index, position|
position_str << content_tag(:small, position.position_type)
end
position_str << "</div>"
end
position_str
end
或类似(注意:未检查拼写错误或错误)