form_for
通过选项添加一个类html: {class: "form-horizontal"}
会覆盖默认值new_model
或edit_model
类。如何在保留现有 form_helper 类的同时添加我的类?
我想:
<form class="edit_model form-horizontal">
或者
<form class="new_model form-horizontal">
代替:
<form class="form-horizontal">
form_for
通过选项添加一个类html: {class: "form-horizontal"}
会覆盖默认值new_model
或edit_model
类。如何在保留现有 form_helper 类的同时添加我的类?
我想:
<form class="edit_model form-horizontal">
或者
<form class="new_model form-horizontal">
代替:
<form class="form-horizontal">
我遇到了完全相同的问题。最终,我想出了这个解决方案
form_for @foo, :html => {:class => "form-horizontal #{controller.action_name}_model_name"}
这对你来说可能有点太晚了,但也许其他人会发现它很有用。
通过选项定义类: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
也许不是一个理想的解决方案,但你有没有考虑过用 JS/Jquery 来做?
例如:
$(document).ready(function(){
$('form.edit_model').addClass('form-horizontal')
});
您可以像使用视图助手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" ...>
html: {class: "edit_model form-horizontal"}
您是否尝试过使用合并方法?[ http://ruby-doc.org/core-1.9.3/Hash.html#method-i-merge]类似 html = html.merge(new) { |key, value1, value2| value1 + " " + value2 } 可以让你将新值输入到类值中。[快速编辑:小心配置和测试实现,以免完全覆盖 html)