Ok! I have just found where the problem was! I had some additional
validations written in my PortalUser model and it was updating because
I wasn't filling all the necessary fields.

On Feb 14, 2:04 am, Amokrane <[email protected]> wrote:
> Hi,
>
> I am having some issues when updating an object that has a nested
> attribute.
>
> My model objects are:
>
> ***User***
>
>     class User < ActiveRecord::Base
>       has_one :portal_user
>
>       accepts_nested_attributes_for :portal_user
>
>       validates_presence_of :username
>     end
>
> ***PortalUser***
>
>     class PortalUser < ActiveRecord::Base
>       belongs_to :user,:dependent => :destroy, :foreign_key
> => :user_id
>     end
>
> I have got the action `update` defined in the User controller like
> this:
>
>     class UsersController < ApplicationController
>       # PUT /users/1
>       # PUT /users/1.xml
>       def update
>         @user = User.find(params[:id])
>
>         respond_to do |format|
>           if @user.update_attributes(params[:user])
>             format.html { redirect_to(@user, :notice => 'User was
> successfully updated.') }
>             format.xml  { head :ok }
>           else
>             flash[:error] = "Error while updating personnal
> information."
>             format.html { render :action => edit_profiles_path }
>             format.xml  { render :xml => @user.errors, :status
> => :unprocessable_entity }
>           end
>         end
>       end
>     end
>
> The update action for the PortalUser controller is also defined:
>
>     class PortalUsersController < ApplicationController
>
>       def update
>         @portal_user = PortalUser.find(params[:id])
>
>         respond_to do |format|
>           if @portal_user.update_attributes(params[:portal_user])
>             format.html { redirect_to(@portal_user, :notice =>
> 'PortalUser was successfully updated.') }
>             format.xml  { head :ok }
>           else
>             flash[:error] = "Error while updating PortalUser."
>             format.html { render :action => edit_profiles_path }
>             format.xml  { render :xml => @portal_user.errors, :status
> => :unprocessable_entity }
>           end
>         end
>       end
>
>     end
>
> And finally I have a `Profile` controller that hosts the nested form:
>
>     class ProfilesController < ApplicationController
>       def edit
>         # Note: I am using a hard coded Id on purpose.
>         @user  = User.find(980190962)
>       end
>     end
>
> View of the Profile's action `edit`:
>
>     <%= form_for @user do |f| %>
>
>               <%= f.fields_for :portal_user do |f_portal_user| %>
>                 <%=  f_portal_user.label :firstname %> <br/>
>                 <%=  f_portal_user.text_field :firstname %> <br/>
>
>                 <%=  f_portal_user.label :lastname %> <br/>
>                 <%=  f_portal_user.text_field :lastname %> <br/>
>               <% end %>
>
>               <%= f.label :username %> <br/>
>               <%= f.text_field :username %><br/>
>
>               <%= f.fields_for :portal_user do |f_portal_user| %>
>                 <%=  f_portal_user.label :phone %> <br/>
>                 <%=  f_portal_user.text_field :phone %><br/>
>
>                 <%=  f_portal_user.label :cellular_phone %> <br/>
>                 <%=  f_portal_user.text_field :cellular_phone %><br/>
>               <% end %>
>
>               <%= submit_tag "Update" %>
>       <% end %>
>
> When I go to the edit page, I can see the information of the user
> (both @user and @portal_user) loaded into the form but when I edit the
> form and send the update nothing happens!
>
> To help you discover the origin of my problem here is the 'trace' (in
> this I tried to rename to change the username field from *Amokrane* to
> *amk*:
>
>     Started POST "/users/980190962" for 127.0.0.1 at 2011-02-13
> 19:38:05 +0100
>       Processing by UsersController#update as HTML
>       Parameters: {"utf8"=>"✓", "authenticity_token"=>"UA
> +dbbmwZKpbNYscIvEsqPFwlBkr7yEok1xpYP3/T6k=",
> "user"=>{"portal_user_attributes"=>{"firstname"=>"Amokrane",
> "lastname"=>"Chentir", "id"=>"980190962", "phone"=>"",
> "cellular_phone"=>"0668002010"}, "username"=>"amk"},
> "commit"=>"Update", "id"=>"980190962"}
>       User Load (0.1ms)  SELECT `users`.* FROM `users` WHERE
> (`users`.`id` = 980190962) LIMIT 1
>       SQL (0.1ms)  BEGIN
>       PortalUser Load (0.3ms)  SELECT `portal_users`.* FROM
> `portal_users` WHERE (`portal_users`.user_id = 980190962) LIMIT 1
>       SQL (0.2ms)  ROLLBACK
>       SQL (0.1ms)  BEGIN
>       SQL (0.1ms)  ROLLBACK
>     DEPRECATION WARNING: Giving a path to render :action is
> deprecated. Please use render :template instead. (called from realtime
> at /usr/local/rvm/rubies/ruby-1.9.2-p136/lib/ruby/1.9.1/benchmark.rb:
> 309)
>     Rendered profiles/edit.html.erb within layouts/application
> (15.1ms)
>     Completed 200 OK in 215ms (Views: 23.5ms | ActiveRecord: 0.9ms)
>
> It could be something obvious given I am relatively new to rails!
>
> Thank you!

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to