Ruby on rails 如何更改由字段\u生成的html标记和类?
这是一个简单的问题,我有点不好意思问,但我一直把头撞在墙上,浏览rails 3文档,但没有成功:/ 所以,事情是这样的: 当我为助手使用Ruby on rails 如何更改由字段\u生成的html标记和类?,ruby-on-rails,ruby-on-rails-3,simple-form,fields-for,Ruby On Rails,Ruby On Rails 3,Simple Form,Fields For,这是一个简单的问题,我有点不好意思问,但我一直把头撞在墙上,浏览rails 3文档,但没有成功:/ 所以,事情是这样的: 当我为助手使用字段时,它将生成的字段包装在中标签 所以,我的代码是 <ul class="block-grid two-up"> <%= f.fields_for :images do |image_builder| %> <%= render "images/form", :f => image_builder %>
字段时,它将生成的字段包装在中代码>标签
所以,我的代码是
<ul class="block-grid two-up">
<%= f.fields_for :images do |image_builder| %>
<%= render "images/form", :f => image_builder %>
<% end %>
</ul>
图像构建器%>
生成的html是:
<ul class="block-grid two-up">
<div class="fields">
<div>
<label for="company_images_attributes_0_image"> Image</label>
<input id="company_images_attributes_0_image"
name="company[images_attributes][0][image]" type="file">
</div>
</div>
<div class="fields">
<div>
<label for="company_images_attributes_1_image"> Image</label>
<input id="company_images_attributes_1_image"
name="company[images_attributes][1][image]" type="file">
</div>
</div>
</ul>
形象
形象
我想做的是将
包装标签改为
文档中说您可以将选项传递给字段,\u,但不清楚您可以传递哪些选项,也许您可以更改此包装器标记
当表单中出现错误时,可以重写函数,有点像ActionView::Base.field\u error\u proc
快速编辑:我忘了提到我正在使用simple_表单生成此表单。我试着在simple_form.rb
config文件中寻找一种定制方法,但没有找到任何方法
解决方案
经过进一步调查,发现表单也在使用gem生成表单(不仅仅是简单的_表单)。此生成器导致的字段_被包装在div标记中。谢谢大家的建议 一个便宜的解决方案就是在表单中添加
标记,如下所示:
<%= f.fields_for :images do |image_builder| %>
<li><%= render "images/form", :f => image_builder %></li>
<% end %>
您说您使用的是simple_form,那么您应该说以下内容禁用了包装器:
f.fields_for :images, wrapper:false do |image_builder|
然后您可以在builder块中添加自己的包装器。字段\u error\u proc方法是规范的。(IIRC的警告是,它的参数是一个HTML字符串,而不是有用的东西,但我可能会把它与其他东西混淆。)我在发布之前尝试了你的第一个建议,但call的字段实际上将它里面的任何东西包装在前面提到的div标记中。所以我会得到类似于- 的东西。
好的,对不起。这实际上就是答案。问题不是简单的形式。。。它的形式实际上是使用嵌套的形式插件以及。。。因此,标记的形式很简单,这会导致字段被包装在div中…感谢您的回答,不幸的是,SimpleForm.wrapper标记只影响单个输入:/fields\u for将我的整个嵌套形式包装在一个标记中。嵌套表单本身的输入是正确的。问题是表单也使用了嵌套表单gem生成器。。。这会导致调用的字段_被包装。谢谢我很惊讶地看到嵌套的_表单没有给您一个选项[:类]来修改它。它被硬编码为“字段”。
<%= f.input :name, :label_html => { :class => 'upcase strong' },
:input_html => { :class => 'medium' }, :wrapper_html => { :class => 'grid_6 alpha' } %>
SimpleForm.wrapper_tag = :p
<%= simple_form_for @user do |f| %>
<%= f.input :username %>
<%= f.input :password %>
<%= f.button :submit %>
<% end %>
# CSS class to add to all wrapper tags.
config.wrapper_class = :input
f.fields_for :images, wrapper:false do |image_builder|