Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何更改由字段\u生成的html标记和类?_Ruby On Rails_Ruby On Rails 3_Simple Form_Fields For - Fatal编程技术网

Ruby on rails 如何更改由字段\u生成的html标记和类?

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

这是一个简单的问题,我有点不好意思问,但我一直把头撞在墙上,浏览rails 3文档,但没有成功:/

所以,事情是这样的:

当我为助手使用
字段时,它将生成的字段包装在
标签

所以,我的代码是

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