Неверная работа в стиле встроенного бутстрапа Simple_form
У меня есть загрузочная загрузочная загрузка twitter и простая форма генерирует следующее:
<form accept-charset="UTF-8" action="/find_map" class="simple_form form-inline" id="new_location" method="post" novalidate="novalidate"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓" /><input name="authenticity_token" type="hidden" value="p5CSoidWaoGMfHY0/3ElWi0XJVg6Cqi9GqWRNlJLBQg=" /></div>
<div class="control-group string required"><div class="controls"><input class="string required" id="location_address" name="location[address]" placeholder="Address" size="50" type="text" /></div></div><input class="btn" name="commit" type="submit" value="Find!" />
</form>
Как-то "Найди!" кнопка не будет отображаться в той же строке, что и поле поиска. Любые идеи?
Спасибо!
UPDATE:
Извините, я должен был упомянуть, что вся разметка генерируется simple_form на основе следующего:
<%= simple_form_for @location, :url => find_map_path, :html => { :class => 'form-inline' } do |f| %>
<%= f.input :address, :label => false, :placeholder => "Address" %>
<%= f.submit "Find!", :class => 'btn' %>
<% end %>
Итак, действительно, проблема с созданной разметкой, похоже, связана с тем, что я запускал установку bootstrap для simple_form и т.д.
![enter image description here]()
На приведенном выше рисунке показана прямая html-форма
<form class="form-inline">
<input type="text" class="input-small" placeholder="Email">
<button type="submit" class="btn">Sign in</button>
</form>
... выше единицы, сгенерированной simple_form.
Ответы
Ответ 1
Я думаю, что здесь есть пара вопросов. Одним из них является форматирование, и путь simple_form добавляет <div>
вокруг поля ввода. Предложение @Ron использования input_field
работает для меня с simple_form 2.0.1. Мой пример - поиск имени в таблице контактов. Ниже показано, что текстовое поле и кнопка появляются рядом:
<%= simple_form_for :contact, :method => 'get',
:html => { :class => 'form-search' } do |f| %>
<%= f.input_field :search, :placeholder => "Name",
:class => "input-medium search-query" %>
<%= f.submit "Find!", :class => "btn" %>
<% end %>
Другая проблема заключается в том, что кажется, что simple_form обычно предполагает, что вы хотите работать с именами моделей и полей. В приведенном выше примере вместо @model
используется :symbol
в качестве первого аргумента, предложенного здесь. Но это все еще генерирует поле ввода с именем contact[search]
, поэтому вам нужно сказать своему контроллеру, как с этим бороться.
Я думаю, что в этом случае проще будет просто использовать simple_form и вместо этого использовать что-то вроде формы рядом с началом Райана Бейтса Railscast # 240, Поиск, сортировка, Paginate с AJAX:
<%= form_tag contacts_path, :method => 'get', :class => "form-search" do %>
<%= text_field_tag :search, nil, :placeholder => "Name",
:class => "input-medium search-query" %>
<%= submit_tag "Find!", :name => nil, :class => "btn" %>
<% end %>
Теперь поле называется "поиск", и я могу использовать его в моем методе контроллера #index примерно так:
@contacts = @contacts.search(params[:search])
Предполагая, что у меня это в моей модели:
def self.search(search)
if search
where('lower(name) LIKE ?', "%#{search.downcase}%")
else
scoped
end
end
Ответ 2
Он создает подформы, потому что вы передаете input
в simple_form. Вместо этого используйте input_field
. (BTW, это также работает с simple_fields_for).
Ответ 3
Вам нужно настроить классы div control-group
и controls
для отображения в виде inline-block
, когда они находятся в форме form-inline
:
form.form-inline div.control-group { display: inline-block; }
form.form-inline div.control-group div.controls { display: inline-block; }
Ответ 4
Добавление в ответ "Отметить":
Итак, input_field
существует только для создания входного компонента, он не даст вам никакой маркировки/ошибки/оболочки. Это означает, что вы не получите ни одного или тега, обертывающего поле, вы должны сделать это вручную, если хотите.
Теперь об использовании формы с объектом SimpleForm является FormBuilder, что означает, что он был создан для работы с пространством имен, являясь им объектом или символом. SimpleForm simple_form_for == Rails 'form_for, вам всегда нужно пространство имен объектов для работы.
Для такого простого случая, как форма поиска, вам лучше с помощью простых форм-помощников, таких как form_tag
, как вы указали. Там нет необходимости полагаться на simple_form_for или form_for для этого, я согласен, и я обычно иду по этому пути.
Я надеюсь, что это поможет, сообщите мне, если у вас все еще есть сомнения.
Ответ 5
Измените: html = > {: class= > 'form-inline'} на: html = > {: class= > 'form-horizontal'}
Ответ 6
Вы не можете переместить кнопку ввода рядом с адресом ввода? Я думаю, что это решит проблему.
<form accept-charset="UTF-8" action="/find_map" class="simple_form form-inline" id="new_location" method="post" novalidate="novalidate">
<div style="margin:0;padding:0;display:inline">
<input name="utf8" type="hidden" value="✓" />
<input name="authenticity_token" type="hidden" value="p5CSoidWaoGMfHY0/3ElWi0XJVg6Cqi9GqWRNlJLBQg=" />
</div>
<div class="control-group string required">
<div class="controls">
<input class="string required" id="location_address" name="location[address]" placeholder="Address" size="50" type="text" />
<!-- move the button to here -->
<input class="btn" name="commit" type="submit" value="Find!" />
</div>
</div>
</form>
Ответ 7
Пожалуйста, всем людям с этой проблемой, не используйте макет жидкости и не забудьте указать документ документа HTML5 для документов.