accepts_nested_attributes_for in Rails 5.2
Getting accepts_nested_attributes_for
to work can be a bit tricky, and most of the walkthroughs I found are a bit dated, so here's a quick update.
Our models will be User
and Address
:
class User < ApplicationRecord
has_many :addresses
accepts_nested_attributes_for :addresses
end
class Address < ApplicationRecord
end
Now, assuming we have a UsersController
, with all the standard resource actions omitted, we try to add addresses
to our permitted params:
class UsersController < ApplicationController
def user_params
params.require(:user).permit(:name, :email, :addresses)
end
end
Logically this seems like it would work, but if we look in the rails server logs, we will see:
Unpermitted parameter: :addresses_attributes
So we add it to our permitted params:
def user_params
params.require(:user).permit(:name, :email, :addresses_attributes)
end
and refresh. Lo and behold, we get the same error!
Unpermitted parameter: :addresses_attributes
The secret is that address_attributes
is a hash, and we need to communicate that to Rails:
def user_params
params.require(:user).permit(:name, :email, addresses_attributes: {})
end
Et voilĂ !
Tweet