たぶん、ここにいる誰かが私を助けてくれるでしょう。
私は次のモデルを持っていますvehicle.rb
:
class Vehicle < ActiveRecord::Base
attr_accessible :parameters_attributes
has_many :parameters, dependent: :destroy
accepts_nested_attributes_for :parameters, reject_if: lambda {
|attrs| attrs.all? {
|tag, value|
value.is_a?(Integer)
tag.blank?
}
}
end
vehicles_controller.rb
def new
@vehicle = Vehicle.new
end
そして私の見解ではnew.html.haml
:
= form_for [:admin, setup(@vehicle)], html: { multipart: true } do |f|
%fieldset{ data: { hook: "new_vehicle" } }
%legend{ align: "center" }
= t(:new_vehicle)
= render partial: 'shared_vehicle_fields', locals: { f: f }
= f.field_container :size do
= f.label :size
%span.required *
%br/
= f.select :size, [t(:please_select) , "small", "medium", "large"], class: 'require'
.parameter_fields
%div.small_vehicle_parameters
= f.fields_for :parameters do |pf|
= render 'parameter_fields', f: pf, text: 'A1'
= f.fields_for :parameters do |pf|
= render 'parameter_fields', f: pf, text: 'A2'
%div.medium_vehicle_parameters
%div.large_vehicle_parameters
%br/
= f.submit t(:submit)
これsetup(@vehicle)
は次のヘルパーです。
def setup(vehicle)
returning(vehicle) do |car|
car.parameters.build if car.parameters.blank?
end
end
パーシャルparameter_fields
は特別なものではありませんが、念のため表示します。
= f.label :tag, text
= f.text_field :value, size: 4
= f.hidden_field :tag, { value: text }
%br/
さて、問題はこれです:
フォームのいずれかのフィールドに正しい値を入力すると、すべて問題ありません。必要に応じてモデルとレコードを作成します。ただし、いずれかの検証に合格しない場合、フォームはエラー メッセージとともに再度レンダリングされます。ただし、パラメーター text_fields は乗算されます。fields_for
タグA1
で2つ、 で2つのフィールドを取得しtag
A2
ます。3 つある場合はfields_for
、それぞれ 3 つというようになります。
テーブルに作成する必要があるレコードの数を知っています (車両のサイズによって異なります)。
誰か助けて?