10

これはちょっと恥ずかしい質問ですが、壁に頭をぶつけてレール3のドキュメントをナビゲートしてきましたが、成功しませんでした:/

だから、ここにあります:

ヘルパーを使用するfields_forと、生成されたフィールドが<div class="fields"> ... </div>タグでラップされます。

だから、私のコードは

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

私がやりたいのは、実際に<div class="fields">ラッパータグをに変更すること<li>です。

ドキュメントには、fields_forにオプションを渡すことができると記載されていますが、渡すことができるオプションについては明確ではありません。おそらく、このラッパータグを変更できますか?

ActionView::Base.field_error_procフォームにエラーがある場合のように、関数をオーバーライドする可能性があります。

クイック編集:このフォームを生成するためにsimple_formを使用していることを忘れました。これをカスタマイズする方法を構成ファイルで調べてみましたsimple_form.rbが、それを行う方法が見つかりませんでした。

解決策さらに調査した結果、フォームは(simple_formだけでなく)フォームを生成するためにもnested_formgem を使用していたことが判明しました。このジェネレーターにより、fields_forがdivタグでラップされていました。皆さんの提案に感謝します!

4

3 に答える 3

12

以下はラッパーを無効にします。

f.fields_for :images, wrapper:false do |image_builder|

次に、ビルダーブロックに独自のラッパーを追加できます。

于 2014-09-25T04:24:26.293 に答える
2

安価な解決策は<li>、次のようなフォームにタグを追加することです。

<%= f.fields_for :images do |image_builder| %>
 <li><%= render "images/form", :f => image_builder %></li>
<% end %>

いくつかのパラメータをに渡してdivタグを完全に削除できるかどうかはわかりませんfield_for。しかし、次のようにhtmlブロックを渡すことで、divクラスまたはidの名前を変更できると思いますform_for

<%= form_for @image, :as => :post, :url => post_image_path, 
   :html => { :class => "new_image", :id => "new_image" } do |f| %>
于 2012-01-20T03:14:49.117 に答える
-1

simple_formを使用していると言った場合は、と言う必要があります<%= f.simple_fields_for..。オプションを使用してみましたかwrapper_html

<%= f.input :name, :label_html => { :class => 'upcase strong' },
  :input_html => { :class => 'medium' }, :wrapper_html => { :class => 'grid_6 alpha' } %>

編集1: SimpleFormドキュメントから:

ラッパー

SimpleFormを使用すると、ラベル、エラー、ヒント、および入力を含むラッパーを追加できます。最初のステップは、ラッパータグを構成することです。

SimpleForm.wrapper_tag = :p

そして今、あなたはもうあなたのf.input呼び出しをラップする必要はありません:

<%= simple_form_for @user do |f| %>
  <%= f.input :username %>
  <%= f.input :password %>
  <%= f.button :submit %>
<% end %>

編集2:

そして、ラッパー要素で使用するcssクラスを指定できるこの構成オプションがあります。

config / initializers / simple_form.rb

# CSS class to add to all wrapper tags.
config.wrapper_class = :input
于 2012-01-20T07:51:53.590 に答える