Простая форма класс форма-горизонтальная с bootstrap 3 не работает в рельсах 4

у меня есть два приложения rails, и "форма-горизонтальная" работает в одном, но не в другом, и я понятия не имею, почему.

первое приложение называется " горизонтальным "(мое тестовое приложение), а другое - "инвентарь"

форма в "горизонтальные" приложения:

<%= simple_form_for(@part, html: {class: 'form-horizontal' }) do |f| %>
  <div class="field">
    <%= f.input :name %>
  </div>
  <div class="field">
    <%= f.input :number %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

и выглядит так в браузере:

horizontal form working

и форма для приложения "инвентарь":

<%= simple_form_for(@item, html: {class: 'form-horizontal' }) do |f| %>
  <%= f.error_notification %>
  <div class="field">
    <%= f.input :part_number %>
  </div>
  <div class="field">
    <%= f.input :on_order_qty %>
    <%= f.input :revision %>
    <%= f.input :current_rev %>  
    <%= f.input :name, required: false%><br>
  </div>

  <%= f.simple_fields_for :parts do |part| %>
    <%= render 'part_fields', :f => part %>
  <% end %>
  <div class="links">
    <%= link_to_add_association 'Add additional supplier', f, :parts %><br><br>
  </div>
  <div class="fields">
    <%= f.input :stock_qty %>
    <%= f.input :ncmr_qty %>
  </div>
  <div class="form-actions">
    <%= f.submit %>
  </div>
<% end %>

но это выглядит так в браузер:

horizontal form not working

почему горизонтальный класс формы не будет работать в приложении "инвентарь"?

похоже, что целочисленные поля ввода отображаются горизонтально, но что-то странное происходит в текстовых полях ввода. Вот исходный html из браузера для приложения "инвентарь":

<form accept-charset="UTF-8" action="/items" class="simple_form form-horizontal"
id="new_item" method="post"><div style="margin:0;padding:0;display:inline"><input
name="utf8" type="hidden" value="✓" /><input name="authenticity_token"
type="hidden" value="H3DKGhGdtfv1e8F1rg9TgDJUyaBspXOSFMpm2gnjwzk=" /></div>

<div class="field">
<div class="input string required item_part_number"><label class="string required"
for="item_part_number"><abbr title="required">*</abbr> Part number</label><input aria
required="true" class="string required" id="item_part_number" maxlength="255"
name="item[part_number]" required="required" size="255" type="text" /></div>
</div>
<div class="field">
<div class="input integer optional item_on_order_qty"><label class="integer optional"
for="item_on_order_qty">On order qty</label><input class="numeric integer optional"
id="item_on_order_qty" name="item[on_order_qty]" step="1" type="number" /></div>
<div class="input string optional item_revision"><label class="string optional"
for="item_revision">Revision</label><input class="string optional" id="item_revision"
maxlength="255" name="item[revision]" size="255" type="text" /></div>
<div class="input boolean optional item_current_rev"><input name="item[current_rev]"
type="hidden" value="0" /><input class="boolean optional" id="item_current_rev"
name="item[current_rev]" type="checkbox" value="1" /><label class="boolean optional"
for="item_current_rev">Current rev</label></div>  
<div class="input string optional item_name"><label class="string optional"
for="item_name">Name</label><input class="string optional" id="item_name" maxlength="255"
name="item[name]" size="255" type="text" /></div><br>
</div>
( I took out the html for the nested fields and some other fields for brevity)
<div class="form-actions">
 <input name="commit" type="submit" value="Create Item" />
</div>
</form>

Я тестировал как в Chrome, так и в Firefox. Я проверил, что bootstrap-Sass gem и simple_form gem-это те же версии. У меня есть нет фантазии настройки css или javascript, просто @import 'bootstrap'; строка bootstrap_custom.css.scss файл в обоих приложениях. Я не знаю, почему поля ввода текста охватывают всю ширину экрана в приложении "инвентарь", но целочисленные поля кажутся прекрасными и визуализируются горизонтально. Что здесь не так?

10 ответов


я столкнулся с подобной проблемой и нашел довольно быстрое решение здесь http://www.iconoclastlabs.com/blog/using-twitter-bootstrap-3-with-simple_form

простое исправление (после выполнения обычной простой формы bootstrap init-см. Ниже), вы добавляете следующий код в инициализатор (например, config/initializers/simple_form_bootstrap.rb)

inputs = %w[
  CollectionSelectInput
  DateTimeInput
  FileInput
  GroupedCollectionSelectInput
  NumericInput
  PasswordInput
  RangeInput
  StringInput
  TextInput
]

inputs.each do |input_type|
  superclass = "SimpleForm::Inputs::#{input_type}".constantize

  new_class = Class.new(superclass) do
    def input_html_classes
      super.push('form-control')
    end
  end

  Object.const_set(input_type, new_class)
end

и вы вне конкуренции.

" обычная простая форма bootstrap init stuff " идет что-то вроде:

rails generate simple_form:install --bootstrap

если вы хотите горизонтальные формы, добавьте это в конфигурацию simple_form

config.form_class = "simple_form form-horizontal"

предостережение: основываясь на некоторых последних комментариях, похоже, что это много не работает для более поздних версий simple_form. Я написал сообщение некоторое время назад, и проект, который использовал этот код (для меня), больше не использует simple_form Так что трудно отследить точный номер версии. Я считаю, что это будет работать для verisions 2.X. Как только вы доберетесь до v3, у вас могут возникнуть проблемы и нужно найти другое решение.


Простая Форма 3.1.0.rc1 был выпущен!! Это поддерживает bootstrap 3. Просто обновите свой драгоценный камень до последней версии, это решит вашу проблему. Вы можете проверить другие улучшения через журналы изменений здесь https://github.com/plataformatec/simple_form/blob/v3.1.0.rc1/CHANGELOG.md


просто обновите simple_form to

gem 'simple_form', '3.1.0.rc2'

и затем повторно

$ rails generate simple_form:install --bootstrap

Я пробовал довольно много разных решений, но ничего не помогло, пока я не добавил wrapper: :horizontal_form строка для каждого входа формы. И, у меня есть последняя версия simple_form: 3.2.1

например:

= f.input :payment_term, wrapper: :horizontal_form

подсказка:https://gist.github.com/chunlea/11125126/


чтобы переопределить на основе формы, измените:

<%= simple_form_for(@item, html: {class: 'form-horizontal' }) do |f| %>

to

<%= simple_form_for(@item, wrapper: :horizontal_form) do |f| %>

чтобы изменить все формы на горизонтальные, измените инициализатор:

config/initializers/simple_form_bootstrap.rb строку:

config.default_wrapper = :vertical_form

to

config.default_wrapper = :horizontal_form

(Не забудьте перезапустить сервер rails после изменения инициализатора)

изменить только индивидуальный вход, изменить:

<%= f.input :on_order_qty %>

в

<%= f.input :on_order_qty, wrapper: :horizontal_form %>


используйте простую форму RC1. Существует целый пример проекта:https://github.com/rafaelfranca/simple_form-bootstrap . Я только что скопировал инициализатор начальной загрузки и последовал примеру horirozontal view в https://github.com/rafaelfranca/simple_form-bootstrap/tree/master/app/views/examples.


Если все вышеперечисленное не работает, попробуйте gem

gem 'simple_form_bootstrap3'

необходимо заменить form_for на horizontal_form_for


пожалуйста, проверьте очень полезный пример приложения здесь для использования простой формы и Bootstrap toolkit на Rails 4 приложения.:

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

Не забудьте документы-страницы.


у меня была проблема с полной длиной поля ввода, охватывающего всю мою страницу. Вот что я сделал, и я надеюсь, что это поможет кому-то еще.
С помощью simple_form 3.4.0

открыть config / инициализаторы / simple_form_bootstrap.рубидий Внизу страницы я изменил следующее: От

config.default_wrapper = :vertical_form  
  config.wrapper_mappings = {  
    check_boxes: :vertical_radio_and_checkboxes,  
    radio_buttons: :vertical_radio_and_checkboxes,
    file: :vertical_file_input,
    boolean: :vertical_boolean,
    datetime: :multi_select,
    date: :multi_select,
    time: :multi_select
  }
end

в:

  config.default_wrapper = :horizontal_form
  config.wrapper_mappings = {
    check_boxes: :horizontal_radio_and_checkboxes,
    radio_buttons: :horizontal_radio_and_checkboxes,
    file: :horizontal_file_input,
    boolean: :horizontal_boolean,
    datetime: :multi_select,
    date: :multi_select,
    time: :multi_select
  }
end

затем перезапустите приложение для повторной инициализации.


когда я использую form-horizontal в своем коде, я также изменяю различные входные данные с помощью классов начальной загрузки. Например, с bootstrap 3:

<div class="form-group">
    <%= f.label :name, class: "control-label col-sm-3" %>
    <div class="col-sm-4"><%= f.text_field :name, placeholder: "Your placeholder", class: "form-control" %></div>
</div>

и теперь вы можете настроить col-sm на col-sm-12, Если хотите, чтобы вся ширина вашего приложения. Я думаю, что так проще настроить. (col-sm предназначены для bootstrap 3, Если вам нужна более старая версия, я думаю, вам нужно использовать старую нотацию span)

дополнительная информация для формы bootsrap здесь:doc

здесь является исключением кода с bootstrap 2 и простой формой:doc

форма вывода с bootsrap 2 должна выглядеть следующим образом:

<form class="form-horizontal">
  <div class="control-group">
    <label class="control-label" for="inputName">Name</label>
    <div class="controls">
      <input type="text" id="Name" placeholder="Name">
    </div>
  </div>
</form>

Я думаю, вам нужно установить класс div контрольной группы и класс div элементов управления.

вот форма doc старый синтаксис:doc

надеюсь, что это помогает