J'essaie d'imbriquer des balises de contenu dans un assistant personnalisé, pour créer quelque chose comme ceci:
<div class="field">
<label>A Label</label>
<input class="medium new_value" size="20" type="text" name="value_name" />
</div>
Notez que l'entrée n'est pas associée à un formulaire, elle sera enregistrée via javascript.
Voici l'aide (elle fera plus que simplement afficher le html):
module InputHelper
def editable_input(label,name)
content_tag :div, :class => "field" do
content_tag :label,label
text_field_tag name,'', :class => 'medium new_value'
end
end
end
<%= editable_input 'Year Founded', 'companyStartDate' %>
Cependant, l'étiquette ne s'affiche pas lorsque j'appelle l'assistant, seule l'entrée est affichée. S'il met en commentaire le text_field_tag, alors l'étiquette est affichée.
Merci!
Tu as besoin d'un +
à une solution rapide: D
module InputHelper
def editable_input(label,name)
content_tag :div, :class => "field" do
content_tag(:label,label) + # Note the + in this line
text_field_tag(name,'', :class => 'medium new_value')
end
end
end
<%= editable_input 'Year Founded', 'companyStartDate' %>
À l'intérieur du bloc de content_tag :div
, seule la dernière chaîne retournée sera affichée.
Vous pouvez également utiliser la méthode concat :
module InputHelper
def editable_input(label,name)
content_tag :div, :class => "field" do
concat(content_tag(:label,label))
concat(text_field_tag(name,'', :class => 'medium new_value'))
end
end
end
J'utilise une variable et concat pour aider à une imbrication plus profonde.
def billing_address customer
state_line = content_tag :div do
concat(
content_tag(:span, customer.BillAddress_City) + ' ' +
content_tag(:span, customer.BillAddress_State) + ' ' +
content_tag(:span, customer.BillAddress_PostalCode)
)
end
content_tag :div do
concat(
content_tag(:div, customer.BillAddress_Addr1) +
content_tag(:div, customer.BillAddress_Addr2) +
content_tag(:div, customer.BillAddress_Addr3) +
content_tag(:div, customer.BillAddress_Addr4) +
content_tag(:div, state_line) +
content_tag(:div, customer.BillAddress_Country) +
content_tag(:div, customer.BillAddress_Note)
)
end
end
la construction de balises de contenu imbriquées avec itération est un peu différente et m'amène à chaque fois ... voici une méthode:
content_tag :div do
friends.pluck(:firstname).map do |first|
concat( content_tag(:div, first, class: 'first') )
end
end