13

form_for通过选项添加一个类html: {class: "form-horizontal"}会覆盖默认值new_modeledit_model类。如何在保留现有 form_helper 类的同时添加我的类?

我想:

<form class="edit_model form-horizontal">或者

<form class="new_model form-horizontal">

代替:

<form class="form-horizontal">

4

6 回答 6

8

我遇到了完全相同的问题。最终,我想出了这个解决方案

form_for @foo, :html => {:class => "form-horizontal #{controller.action_name}_model_name"}

这对你来说可能有点太晚了,但也许其他人会发现它很有用。

于 2013-11-14T19:02:33.630 回答
4

通过选项定义类:html => {:class => '...'}会覆盖默认构建器添加的任何类。但是,您可以在块中附加 CSS 类而不覆盖这些类。

使用form_for助手,:class如果未设置,则将是一个字符串。追加时注意前导空格。(更新:还请注意,在最新版本的 Rails 中,字符串将被冻结+=,因此必须使用它来代替<<以避免“无法修改冻结的字符串”错误。)

<%= form_for @model do |f| %>
  <% f.options[:html][:class] += ' form-horizontal' %>
  <%# ... %>
<% end %>

<form class="edit_model form-horizontal">

如果您使用simple_form_for帮助器,options[:html][:class]则将是一个数组,并且您不需要额外的前导空格(尽管它不会造成伤害)。

<%= simple_form_for @model do |f| %>
  <% f.options[:html][:class] << 'form-horizontal' %>
  <%# ... %>
<% end %>

<form class="simple_form edit_model form-horizontal">

如果您使用符号而不是模型,form_for则不会设置类,并且options[:html][:class]nil在块中。但是,如果您这样做,则无论如何您都没有新的或持久的模型。

<%= form_for :model do |f| %>
  <% f.options[:html][:class] << ' form-horizontal' %>
  <%# ... %>
<% end %>

NoMethodError: undefined method `<<' for nil:NilClass
于 2017-07-20T17:04:56.860 回答
1

也许不是一个理想的解决方案,但你有没有考虑过用 JS/Jquery 来做?

例如:

$(document).ready(function(){
    $('form.edit_model').addClass('form-horizontal')
});
于 2013-01-31T09:38:07.413 回答
1

您可以像使用视图助手dom_class(object, prefix = nil)一样生成类名form_for

直接在表单中执行它不是很干净,但是将其合并到帮助程序中可能只是票。例如:

# app/helpers/application_helper.rb
def class_for object, *additional_classes
  additional_classes.unshift dom_class(object, object.persisted? ? 'edit' : 'new')
end

# app/views/models/_form.html.erb
<%= form_for @model, :html => {:class => class_for(@model, 'form-horizontal')} do |f| %>
  <%# ... %>
<% end %>

<form class="new_model form-horizontal" ...>
于 2016-06-01T23:21:02.960 回答
0
html: {class: "edit_model form-horizontal"}
于 2012-05-31T18:35:24.340 回答
0

您是否尝试过使用合并方法?[ http://ruby-doc.org/core-1.9.3/Hash.html#method-i-merge]类似 html = html.merge(new) { |key, value1, value2| value1 + " " + value2 } 可以让你将新值输入到类值中。[快速编辑:小心配置和测试实现,以免完全覆盖 html)

于 2015-12-16T23:04:22.267 回答