Ruby on rails 将所有属性默认为简单形式的包装html?

Ruby on rails 将所有属性默认为简单形式的包装html?,ruby-on-rails,simple-form,Ruby On Rails,Simple Form,因为DOM子对象总是可以通过其父对象访问,所以我希望总是将:class和:data应用于包装器。比如说, <%= f.input :name, :class => :half %> 但是没有运气。这是通过自定义生成器实现的唯一方法吗?如果是这样,我如何在自定义生成器中实现这一点?您可以使用如下标记包装输入: ## Inputs b.use :label b.wrapper :default, :tag => 'div', :class => 'controls'

因为DOM子对象总是可以通过其父对象访问,所以我希望总是将
:class
:data
应用于包装器。比如说,

<%= f.input :name, :class => :half %>

但是没有运气。这是通过自定义生成器实现的唯一方法吗?如果是这样,我如何在自定义生成器中实现这一点?

您可以使用如下标记包装输入:

## Inputs
b.use :label
b.wrapper :default, :tag => 'div', :class => 'controls' do |ba|
  ba.use :input
  ba.use :error, :wrap_with => { :tag => 'span', :class => 'label label-important' }
  ba.use :hint,  :wrap_with => { :tag => 'p', :class => 'help-block' }

要做到这一点,您需要编写自己的表单生成器,根据您所描述的,您希望行为与简单表单有足够的区别,我不确定使用简单表单是否有意义-您可能只想滚动自己的表单生成器堆栈

您必须查看如何滚动自己的表单生成器,我还没有这样做

也就是说,一个好的解决方法可能是,如果您只关心如何在包装器上放置类和数据属性,而不需要太多散列嵌套,那么您可以从简单表单中省略包装器,直接提供您自己的包装元素。我想如果你在每一个上面都加上课程等,那会更干净。例如,使用haml:

.input.quarter{:data => { :foo => :bar }}
  = f.input :foo, :wrapper => false

我对您的动机很好奇。没有理由将类应用于输入而不是其包装器,因此没有必要为:类指定:wrapper\u html。我正在为我的组织创建一个样式指南,希望使标记简洁、易于后端工程师实现或修改。为此,您必须使用自定义生成器。这只是我的观点,但我不确定在这里使用自定义生成器是否更好——从语义上讲,输入标记将被包装,包装器将以简单表单默认的方式保存类。我知道你想节省一些打字时间,但你真正节省了多少打字时间?你的应用程序有多少个表单,你实际上必须给每个输入一个自定义类?@Andrew这与额外的输入无关。这是一个简单的示例,但是当您将更多属性传递给输入和包装器时,可能会令人困惑。若要仅添加数据属性,最终将嵌套3个级别。大多数输入都有一个二分之一、三分之一或三分之二的类,因为它是基于网格的表单设计。
## Inputs
b.use :label
b.wrapper :default, :tag => 'div', :class => 'controls' do |ba|
  ba.use :input
  ba.use :error, :wrap_with => { :tag => 'span', :class => 'label label-important' }
  ba.use :hint,  :wrap_with => { :tag => 'p', :class => 'help-block' }
.input.quarter{:data => { :foo => :bar }}
  = f.input :foo, :wrapper => false