Rails, метка с вложенным HTML, используя FormBuilder и Devise, с разметкой Bootstrap - PullRequest
4 голосов
/ 13 марта 2012

Я работаю над интерфейсной частью приложения Rails 3.1. Мы используем Twitter Bootstrap в качестве CSS Framework, Devise в качестве менеджера аутентификации и гем I18n для локализации.

Это синтаксис устройства для флажка с его меткой

<%= f.label :remember_me %>
<%= f.check_box :remember_me %>

И это, конечно, сгенерированный HTML

<label for="user_remember_me">Ricordati di me</label>
<input name="user[remember_me]" type="hidden" value="0">
<input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1">

Поскольку Bootstrap добавляет это правило для меток display: block, метка и флажок находятся не в одной строке. Чтобы иметь одну строку, мне нужен вывод в формате HTML, подобный этому

<label for="user_remember_me">
    Ricordati di me
    <input name="user[remember_me]" type="hidden" value="0">
    <input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1">
</label>

Как показано в документации по разметке форм

Вы заметите, что текст метки написан на итальянском, член команды, который обеспечил локализацию для Devised, усердно работал, чтобы выяснить, как это сделать, и я не хочу заставлять его снова работать над этим, вводя новые локализованные строки .

Мне известно о том приятном факте, что метод FormBuidler label принимает блок в качестве аргумента, чтобы я мог сделать

<% f.label :remeber_me do %>
    <%= f.check_box :remember_me %>
<% end %>

Но это приводит к выводу HTML без метки! o.o Чтобы быть конкретным, это то, что я получаю:

<input name="user[remember_me]" type="hidden" value="0">
<input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1">

Я попытался заглянуть в исходный код, метод f.label вызывает метод label , но я могу видеть только то, что при наличии блока текст не будет и что этикетка и блок будут отображаться с помощью label_tag из template_object.

Прежде чем погрузиться в копание исходного кода и не спать, я решил немного подождать и обратиться за помощью к сообществу спасателей StackOverflow.

Я что-то упустил? Я неправильно звоню f.label с блоком? Отсутствует какой-либо параметр?

Спасибо !!

Ответы [ 2 ]

5 голосов
/ 19 октября 2012

Я не знаю, работал ли ты когда-нибудь ...

Запуск на Rails 3.2.6 вот что мне нужно было сделать:

<%= f.label :remember_me do %>
  <%= f.check_box :remember_me %>
  Remember Me?
<% end %>

Надеюсь, это поможет вам, поскольку я пришел сюда в поисках ответа на точно такую ​​же проблему и не смог его найти, кроме как методом проб и ошибок.

0 голосов
/ 15 июня 2012

Если вы хотите, чтобы метка и флажок находились в одной строке, вы должны включить .form-inline в ваш

<form class="form-inline">
  <label for="user_remember_me">Ricordati di me</label>
  <input name="user[remember_me]" type="hidden" value="0">
  <input id="user_remember_me" name="user[remember_me]" type="checkbox" value="1">
</form>

http://jsfiddle.net/baptme/66TJY/

<%= form_tag( :class => "form-inline") %>
...