[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 %><br>

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

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

<%= profile.label :full_name %><br>

<%= 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 )

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 +0800

Processing 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[0m

Completed 422 Unprocessable Entity in 78ms

ActiveRecord::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’

``

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

No problem :slight_smile: refer this for more info

http://www.sitepoint.com/complex-rails-forms-with-nested-attributes/#adding-an-address