いくつかの一般的なフィールドを検証するために ActiveModel オブジェクトを使用する複雑なフォームが 1 つあります。
class FormReportPivot
include ActiveModel::Validations
include ActiveModel::Conversion
extend ActiveModel::Naming
attr_accessor :name, :pages, :columns, :rows, :table,
:pages_aggregation, :columns_aggregation, :rows_aggregation, :table_aggregation
def initialize(attributes = {})
attributes.each do |name, value|
public_send("#{name}=", value)
end
end
def persisted?
false
end
end
このフィールドにはnested_formがあります:
= f.simple_fields_for :pivots do |pivots_builder|
= render :partial => 'pivot_fields', :locals => { :pivots_builder => pivots_builder }
= f.link_to_add "Add pivot", :pivots, model_object: FormReportPivot.new, class: "btn blue"
部分的:
= pivots_builder.input :name, input_html: {:class => "m-wrap"},
placeholder: t('.name')
= pivots_builder.input :columns, collection: @form_report.columns_collection, :include_blank => false, input_html: {:class => "m-wrap chosen", multiple: true}
= pivots_builder.input :rows, collection: @form_report.columns_collection, :include_blank => false, input_html: {:class => "m-wrap chosen", multiple: true}
= pivots_builder.input :table, collection: @form_report.columns_collection, :include_blank => false, input_html: {:class => "m-wrap chosen", multiple: true}
= pivots_builder.input :table_aggregation, collection: FormReport::AGGREGATING_FUNCTIONS, :include_blank => false, input_html: {:class => "m-wrap chosen"}
しかし、「ピボットを追加」をクリックすると、同じ名前で同じ ID でタイムスタンプのない同じフィールドが取得されます。
<input class="string optional m-wrap m-wrap"
id="form_report_pivots_attributes_name"
name="form_report[pivots_attributes][name]" placeholder="" title="">