Here are some popular mistakes when using nested forms:
fields_for
instead of form.fields_for
.accepts_nested_attributes
in the containing model. Rails won't complain, but nothing will work. In particular, nested_form.object
will be nil
.:reject_if
option lambda in your accepts_nested_attributes
call is defined incorrectly. Raise the attributes hash given to your :reject_if
lambda to see if it looks like you expect.accepts_nested_attributes
with a correct :reject_if
lambda.form.fields_for
block. Don't do that, fields_for
already iterates for you.form.fields_for |nested_form|
, but continue to call form helpers (like text_field
) on the containing form
instead of nested_form
.has_many :through
association, the nested form should be on the join model itself, instead of the model associated through the join model. _destroy
checkboxes should probably be on the form for the join model, or you will end up with orphaned join model records.@model.nested_model.build
.
new_nested_record = f.object.send(nested_association).klass.new
.id
attribute into the nested params: params.permit(:attribute_1, ..., nested_attributes: [:id, ...])
. This will render additional records from the last cached response in form round trips, since the id
can not be assigned by the server while it may be outputting Unpermitted parameter: :id
within the console.inverse_of
for a has_many through
association. Rails will then not
be able to process a collection assignment
Show archive.org snapshot
, since it can't find the inverse association.