ruby on rails - How do I create an HTML tag and place it within an existing HTML tag with content_tag in a helper? -
i have @profile
has_many positions
. html version looks this:
<h3>defensive midfield</h3> <div class="alternative-positions"> <small>attacking midfield</small><br /> <small>right midfield</small> </div>
however, doing creating helper abstract view logic, putting bunch of content_tags
in profile_helper.rb
.
the rules follows:
- when profile has 1 position, goes
h3
tag. - when there 2, first 1 goes
h3
, , second goessmall
indiv.alternative-positions
. - when there 3, follow #1 & #2 put third position within newly created
<small>
within existingdiv.alternative-positions
.
1 & 2 straightforward , can code:
def player_positions(profile) profile.positions.each_with_index |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
which called in view so:
<%= player_positions(@profile) %>
however, issue struggling 3rd one.
i not quite sure how select div, , make sure newly created small
tag , content nested within existing div
.
how achieve that?
i'd recommend treating first in list separately (ie not being part of each clause) eg:
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 # surrounding div other positions position_str << "<div class='alternative-positions'>" profile.positions[1..-1].each_with_index |index, position| position_str << content_tag(:small, position.position_type) end position_str << "</div>" end position_str end
or similar (note: not checked typos or bugs)
Comments
Post a Comment