简体   繁体   English

Simple_form类形式水平,引导程序3不在rails 4中工作

[英]Simple_form class form-horizontal with bootstrap 3 not working in rails 4

I have two rails apps, and the 'form-horizontal' is working in one, but not the other, and I have no idea why. 我有两个rails应用程序,'form-horizo​​ntal'在一个工作,但不是另一个,我不知道为什么。

First app is called "Horizontal" (my test app) and the other is "Inventory" 第一个应用程序称为“水平”(我的测试应用程序),另一个是“库存”

Form in "horizontal" app: 在“横向”应用程序中的表单:

<%= 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 %>

and looks like this in the browser: 并在浏览器中看起来像这样:

横向形式工作

and the form for the "inventory" app is: 并且“库存”应用程序的表单是:

<%= 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 %>

but it looks like this in the browser: 但它在浏览器中看起来像这样:

横向形式不起作用

Why won't the form-horizontal class work in the "Inventory" app? 为什么表单水平类不能在“库存”应用程序中工作?

It appears that the integer input fields are getting rendered horizontally, but something weird is happening in the text input fields. 似乎整数输入字段是水平渲染的,但在文本输入字段中发生了一些奇怪的事情。 Here is the source html from the browser for the "Inventory" app: 以下是“Inventory”应用程序的浏览器源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="&#x2713;" /><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>

I've tested in both Chrome and Firefox. 我已经在Chrome和Firefox中进行了测试。 I've checked that the bootstrap-sass gem and simple_form gem are the same versions. 我已经检查过bootstrap-sass gem和simple_form gem是相同的版本。 I have no fancy customization css or javascript, just the @import 'bootstrap'; 我没有花哨的自定义css或javascript,只有@ @import 'bootstrap'; line in a bootstrap_custom.css.scss file in both apps. 两个应用程序中的bootstrap_custom.css.scss文件中的行。 I don't know why the text input fields cover the whole width of the screen in the "Inventory" app, but the integer fields seem to be fine and rendering horizontally. 我不知道为什么文本输入字段覆盖了“库存”应用程序中屏幕的整个宽度,但是整数字段看起来很好并且水平渲染。 What's wrong here? 这有什么不对?

I ran into a similar issue and found a pretty quick fix here http://www.iconoclastlabs.com/blog/using-twitter-bootstrap-3-with-simple_form 我遇到了类似的问题,发现了一个非常快速的解决方法http://www.iconoclastlabs.com/blog/using-twitter-bootstrap-3-with-simple_form

The simple fix is (after doing the normal simple form bootstrap init stuff -see below), you add the following code to an initializer (like config/initializers/simple_form_bootstrap.rb) 简单的修复是(在执行正常的简单形式bootstrap init stuff之后 - 见下文),将以下代码添加到初始化程序(如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

and you are off to the races. 而且你要参加比赛了。

The "normal simple form bootstrap init stuff" goes something like: “普通的简单形式bootstrap init stuff”类似于:

rails generate simple_form:install --bootstrap

If you want horizontal forms, add this to your simple_form config 如果您想要水平表单,请将其添加到simple_form配置中

config.form_class = "simple_form form-horizontal"

CAVEAT: Based on some recent comments, it appears this many not work for more recent versions of simple_form . CAVEAT:基于最近的一些评论,看起来很多这些评论都不适用于更新版本的simple_form I wrote the post some time ago and the project that was using this code (for me) is no longer using simple_form so it's hard to track down the exact version number. 我前一段时间写了这篇文章,使用这段代码的项目(对我而言)不再使用simple_form因此很难找到确切的版本号。 I believe this will work for verisions 2.x. 我相信这将适用于2.x.的测试。 Once you get to v3 you may have issues and have to find a different solution. 一旦你到达v3,你可能会遇到问题,必须找到不同的解决方案。

Simple Form 3.1.0.rc1 has been released!! 简单形式3.1.0.rc1已经发布!! This supports bootstrap 3. Just update your gem to the latest version this will solve your problem. 这支持bootstrap 3.只需将您的gem更新到最新版本,这将解决您的问题。 You can check the other enhancements through the change logs here https://github.com/plataformatec/simple_form/blob/v3.1.0.rc1/CHANGELOG.md 您可以通过更改日志检查其他增强功能https://github.com/plataformatec/simple_form/blob/v3.1.0.rc1/CHANGELOG.md

Just update your simple_form to 只需将simple_form更新为

gem 'simple_form', '3.1.0.rc2'

And then re-run 然后重新运行

$ rails generate simple_form:install --bootstrap

I tried quite many different solutions but, nothing helped until I've added wrapper: :horizontal_form line to each form inputs. 我尝试了很多不同的解决方案但是,在我为每个表单输入添加了wrapper: :horizontal_form行之前没有任何帮助。 And, I have the latest simple_form version: 3.2.1 而且,我有最新的simple_form版本:3.2.1

For example: 例如:

= f.input :payment_term, wrapper: :horizontal_form

Hint: https://gist.github.com/chunlea/11125126/ 提示: https//gist.github.com/chunlea/11125126/

To override on per form basis, change: 要在每个表单的基础上覆盖,请更改:

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

to

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

to change all forms to horizontal, change initializer: 要将所有表单更改为水平,请更改初始化程序:

config/initializers/simple_form_bootstrap.rb line: config/initializers/simple_form_bootstrap.rb行:

config.default_wrapper = :vertical_form

to

config.default_wrapper = :horizontal_form

(remember to restart rails server after changing initializer) (记得在更改初始化程序后重新启动rails服务器)

to change just an individual input, change: 改变个人意见,改变:

<%= f.input :on_order_qty %>

to

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

Use simple form RC1. 使用简单形式RC1。 There is an entire example project: https://github.com/rafaelfranca/simple_form-bootstrap . 有一个完整的示例项目: https//github.com/rafaelfranca/simple_form-b​​ootstrap I've just copied bootstrap initializer and followed horirozontal view example at https://github.com/rafaelfranca/simple_form-bootstrap/tree/master/app/views/examples . 我刚刚复制了bootstrap初始化程序,并在https://github.com/rafaelfranca/simple_form-b​​ootstrap/tree/master/app/views/examples上关注了horirozontal视图示例。

If all the above doesn't work try gem 如果以上所有都不起作用,请尝试使用gem

gem 'simple_form_bootstrap3' gem'simple_form_bootstrap3'

Need to replace form_for with horizontal_form_for 需要用horizo​​ntal_form_for替换form_for

Please check out the very helpful sample app here for usage of Simple Form and the Bootstrap toolkit on a Rails 4 application.: 请查看非常有用的示例应用程序,以便在Rails 4应用程序中使用Simple Form和Bootstrap工具包:

http://simple-form-bootstrap.plataformatec.com.br/ http://simple-form-b​​ootstrap.plataformatec.com.br/

Don't forget the docs page . 不要忘记文档页面

I had an issue with the full length of the input field spanning my entire page. 我的整个页面的输入字段的全长都有问题。 Here is what I did and I hope it helps someone else. 这是我做的,我希望它可以帮助别人。
Using simple_form 3.4.0 使用simple_form 3.4.0

Open config/initializers/simple_form_bootstrap.rb At the bottom of the page I changed the following: From 打开config / initializers / simple_form_bootstrap.rb在页面底部我更改了以下内容:From

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

To: 至:

  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

Then restart your app to reinitialize. 然后重新启动您的应用以重新初始化。

When i use form-horizontal in my code, i also modify the different inputs with the bootstrap classes. 当我在我的代码中使用form-horizo​​ntal时,我还使用bootstrap类修改了不同的输入。 For exemple with bootstrap 3: 例如,使用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>

And now you can adjust the col-sm to col-sm-12 if you want the entire width of your app. 现在,如果您想要应用程序的整个宽度,可以将col-sm调整为col-sm-12。 I think it's easier to customize this way. 我认为以这种方式定制更容易。 ( col-sm are for bootstrap 3, if you need older version i think you have to use the old span- notation) (col-sm用于bootstrap 3,如果你需要旧版本,我认为你必须使用旧版本)

More info for bootsrap form here: doc 有关bootsrap的更多信息,请访问: doc

Here is an exemple of code with bootstrap 2 and simple form: doc 以下是带有bootstrap 2和简单形式的代码示例: doc

The output form with bootsrap 2 should look like this: 使用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>

I think you need to set a control-group class div and a controls class div. 我认为你需要设置一个控制组类div和一个控件类div。

Here is the doc form the old syntax: doc 这是旧语法的doc形式: doc

Hope it helps 希望能帮助到你

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM