[ERROR] Unpermitted Parameters: profile (NestedAttributes)

Hi guys,

Im having a problem with my rails apps where error “Unpermitted
Parameters:
profile” appear

UsersController

def edit
if @user
render
else
redirect_to admin_users_path, notice: “User profile not found.”
end
end

def update
# Rails.logger.debug “===> (1)”
if @user.update(user_params)
redirect_to edit_admin_user_path, notice:
“#{@user.profile.nama_penuh} account has been updated.”
else
render ‘edit’
end
end

private

def set_user
@user = User.find(params[:id])
end

def user_params
params.require(:user).permit(:id, :login, :email,
profile_attributes:
[:user_id, :full_name])
end

edit.html.erb

<%= form_for :user, url: admin_user_path(@user), method: :patch do |f|
%>

<%= f.label :username %>
<%= f.text_field :username, :class => "form-control" %>

<%= f.fields_for :profile, @user.profile do |profile| %>

<%= profile.label :full_name %>
<%= profile.text_field : full_name, :class => "form-control" %>
<% end %>
<%= f.submit "Save", :class => "btn btn-primary" %>

<% end %>

User.rb

class User < ActiveRecord::Base

has_one :profile
accepts_nested_attributes_for :profile #, update_only: true,
allow_destroy: true

validates :username, :uniqueness => { :case_sensitive => false }

end

Profile.rb

class Profile < ActiveRecord::Base
belongs_to :user

validates_presence_of :user_id
validates_presence_of :full_name
end

development.log

Started PATCH “/master/users/7” for 127.0.0.1 at 2014-09-10 23:18:26
+0800
Parameters: {“utf8”=>“✓”,
“authenticity_token”=>“23oUfOBaYAmcrfhW3R11F1x53lJAT760Shv0HqkmEzw=”,
“user”=>{“username”=>“lisa”, “profile”=>{“full_name”=>“Evalisa
Andriaasdasda”}}, “commit”=>“Save”, “id”=>“7”}
[1m [35mUser Load (0.3ms) [0m SELECT users.* FROM users WHERE
users.id = 7 LIMIT 1
[1m [36mUser Load (0.3ms) [0m [1mSELECT users.* FROM users
WHERE
users.id = 6 ORDER BY users.id ASC LIMIT 1 [0m
Unpermitted parameters: profile
[1m [35m (0.2ms) [0m BEGIN
[1m [36mUser Exists (0.4ms) [0m [1mSELECT 1 AS one FROM users
WHERE (users.username = ‘lisa’ AND users.id != 7) LIMIT 1 [0m
[1m [35m (0.2ms) [0m COMMIT
[1m [36mProfile Load (0.4ms) [0m [1mSELECT profiles.* FROM
profiles WHERE profiles.user_id = 7 LIMIT 1 [0m

I really dont know what is the mistake. Please help.

Thanks in advance!

Ahmad,

the parameters you’re sending from your form should be like this :

{“utf8”=>“✓”,
“authenticity_token”=>“23oUfOBaYAmcrfhW3R11F1x53lJAT760Shv0HqkmEzw=”,
“user”=>{“username”=>“lisa”,
“profile_attributes”=>{“full_name”=>“Evalisa
Andriaasdasda”}}, “commit”=>“Save”, “id”=>“7”}

Update your form ( name attribute )

Ah, now the error has gone after making some change at user.rb

class User < ActiveRecord::Base

has_one :profile
accepts_nested_attributes_for :profile, update_only: true,
allow_destroy:
true

validates :username, :uniqueness => { :case_sensitive => false }
end

Thanks for the help

Hi Vivek,

Ok, I’ve update my form to:-

<%= form_for :user, url: admin_user_path(@user), method: :patch do |f|
%>

<%= f.label :username %>
<%= f.text_field :username, :class => "form-control" %>

<%= f.fields_for :profile_attributes, @user.profile do |profile| %>

<%= profile.label : full_name %>
<%= profile.text_field :full_name, :class => "form-control" %>
<% end %>
<%= f.submit "Save", :class => "btn btn-primary" %>

<% end %>

But now I end up with another error:-

development.log

Started PATCH “/master/users/7” for 127.0.0.1 at 2014-09-11 00:21:01
+0800Processing by Admin::UsersController#update as HTML Parameters:
{“utf8”=>“✓”,
“authenticity_token”=>“23oUfOBaYAmcrfhW3R11F1x53lJAT760Shv0HqkmEzw=”,
“user”=>{“username”=>“lisa”,
“profile_attributes”=>{“full_name”=>“Evalisa
Andria”}, “commit”=>“Save”, “id”=>“7”} [1m [36mUser Load (0.4ms) [0m
[1mSELECT users.
FROM users WHERE users.id = 7 LIMIT 1 [0m
[1m [35mUser Load (0.3ms) [0m SELECT users.* FROM users WHERE
users.id = 6 ORDER BY users.id ASC LIMIT 1 [1m [36m (0.2ms)
[0m
[1mBEGIN [0m [1m [35mProfile Load (0.3ms) [0m SELECT profiles.*
FROM profiles WHERE profiles.user_id = 7 LIMIT 1 [1m [36m
(1.0ms) [0m [1mROLLBACK [0mCompleted 422 Unprocessable Entity in
78msActiveRecord::RecordNotSaved (Failed to remove the existing
associated
profile. The record failed to save after its foreign key was set to
nil.):
app/controllers/admin/users_controller.rb:26:in `update’*

No problem :slight_smile: refer this for more info