Twitter-Bootstrap и формы в Rails

Это может быть вопрос новичков, но не так много удачи в этом. Фон:

  • версия Rails 3.0.x
  • Bootstrap 2.0 - использование как предварительно скомпилированное, просто помещенное в public/stylesheets. Att
  • Попытка сделать форму с горизонтальной компоновкой, т.е. надпись рядом с полем ввода в той же строке.

Проблема в том, что я не могу заставить форму работать, но могу получить примерный пример кода Bootstrap, в той же форме, что и в макете. Форма Rails выглядит так:

<div class="row-fluid">
  <div class="span4 well">
    <%= form_for @member, :html => {:class => "form-horizontal"} do |m| %>
        <fieldset>

          <%= m.label :title  %>
          <%= m.text_field :title %>   

          <%= m.label :first_name %>
          <%= m.text_field :first_name %>
    <% end %>
   </div>
</div>

Обратите внимание, что метод form_for имеет класс формы-горизонтальный, как описано в Bootsrap form CSS

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

Теперь, если я включаю некоторый пример кода Bootstrap для таких форм, как:

<div>
  <form class="form-horizontal">
    <fieldset>
      <legend>Legend text</legend>
      <div class="control-group">
        <label class="control-label" for="input01">Text input</label>

        <div class="controls">
          <input type="text" class="input-xlarge" id="input01">

          <p class="help-block">Supporting help text</p>
        </div>
      </div>
    </fieldset>
  </form>
</div>

Затем я получаю ожидаемый результат - метку и поле ввода в одной строке в горизонтальной компоновке.

Я попытался добавить стиль "control-label" в компоненты m.label и m.text_field, но не радость в том, что макет будет горизонтальным.

Таким образом, не уверен, в чем проблема, так как рабочая часть проверяет, что я могу заставить Bootstrap работать, хотя с моей формой Rails она не соблюдает форму-горизонтальную.

Ответы

Ответ 1

Если вы хотите сделать форму ванили (как и в, без простой формы-бутстрапа или других драгоценных камней), вам нужно соответствующим образом сформировать форму HTML:

<div class="row-fluid">
  <div class="span4 well">
    <%= form_for @member, :html => {:class => "form-horizontal"} do |m| %>
        <fieldset>
          <legend>Member Form</legend>
          <div class="control-group">
            <%= m.label :title, :class => "control-label" %>
            <div class="controls">
              <%= m.text_field :title, :class => "input-xlarge" %>
            </div>
          </div>

          <div class="form-actions">
            <%= m.submit :class => "btn btn-primary" %>
          </div>
        </fieldset>
    <% end %>
  </div>
</div>

Как говорит Арун Кумар Арджунан, построитель форм не генерирует html, необходимый для фреймворка bootstrap.

Определенно проверяйте HTML-код, необходимый на страницах загрузочных примеров и/или проверяя DOM (я обнаружил, что он не очень хорошо документирован). В общем, вы можете сделать это вручную, как и выше, создав собственный конструктор форм или используя различные драгоценные камни.

Кроме того, в качестве побочного элемента, убедитесь, что как настроить ошибки css, потому что по умолчанию, когда возникает ошибка проверки, поле обернуто <div class ="field_with_errors">, разбивая селектора css, используемые бутстрапом.

Ответ 2

Проблема заключается в том, что полевые помощники не генерируют правильный html для загрузочного буфера twitter.

Вы можете использовать simple_form gem, который поддерживает twitter bootstrap. См. Документацию:

https://github.com/plataformatec/simple_form

Вот пример приложения: https://github.com/rafaelfranca/simple_form-bootstrap

Live Demo: http://simple-form-bootstrap.plataformatec.com.br/

Ответ 3

Я нашел драгоценный камень для начальной загрузки Stephen Potenza, чтобы быть невероятно полезным (и простым в использовании). Добавьте драгоценный камень в свой gemfile и используйте "bootstrap_form_for", где вы будете использовать "form_for":

<%= bootstrap_form_for @user do |f| %>
  <%= f.text_field :name, placeholder: "Enter your name" %>
  <%= f.text_field :email, placeholder: "Enter your email" %><br>
  <%= f.password_field :password, placeholder: "Enter a password" %>
  <%= f.password_field :password_confirmation, hide_label: true, placeholder: "Confirm password" %>
<%= f.submit "Sign Up" %>
<% end %>

Делает все это ветерок.

https://github.com/potenza/bootstrap_form

Ответ 4

Другой подход, который может быть немного проще:

В views/<model>/edit.html.erb:

<%= form_for(@<model>, :html => {:class => 'form form-container'}) do |f| %>
<%= f.error_messages %>

<%= render '<model>/form',:f=>f %><% end %>

Затем создайте файл, подобный этому views/<model>/_form.html.erb, который будет содержать ваши поля формы с поддержкой Bootstrap, то есть:

<div class="form-group">
  <%= f.label(:name) %>
  <%= f.text_field(:name, class: "form-control") %>
</div>