thanks guys, between the two of you I got it nailed!

Max

On Jan 5, 11:19 am, M Daubs <[email protected]> wrote:
> Here is my suggestion.
>
> Have your User model ignore attempts to set a blank password:
>
> def password=(value)
>   super(value) unless value.empty?
> end
>
> And then change your controller to:
>
> if @user.update_attributes(params[:user])
>   flash[:success] = "Profile updated."
>   redirect_to @user
> else
>   flash[:failure] = "ERROR: Profile NOT updated."
>   @title = "Edit user"
>   render :action => "edit"
> end
>
> If you have validations you may have to tweak them a bit.
>
> On Jan 5, 12:54 pm, Michael Pavling <[email protected]> wrote:
>
>
>
>
>
>
>
> > On 5 January 2012 17:37, Allen Maxwell <[email protected]> wrote:
>
> > > I've worked around this by using a bunch of ugly if statements to update 
> > > each field individually (not elegant but got the job done when i was 
> > > first learning)  It is UGLY and not robust so i need to refactor (and 
> > > improve) it.  Here's what i have:
>
> > GAH! That certainly is ugly :-)
>
> > How does your new approach work now if the user *does* try to change
> > their password?...
>
> > First off, there's no need for all the nesting, just chain them if you
> > insist on stuff like this:
>
> > if @user.update_attribute( :name, params[:user][:name]) &&
> >  @user.update_attribute( :email, params[:user][:email] ) &&
> >  @user.update_attribute( :admin, params[:user][:admin] ) &&
> >  @user.update_attribute( :teamleader, params[:user][:teamleader] ) &&
> >  @user.update_attribute( :street, params[:user][:street] ) &&
> >  @user.update_attribute( :city, params[:user][:city] ) &&
> >  @user.update_attribute( :state, params[:user][:state] ) &&
> >  @user.update_attribute( :zip, params[:user][:zip] ) &&
> >  @user.update_attribute( :login, params[:user][:login] ) &&
> >  @user.update_attribute( :startdate, params[:user][:startdate] ) &&
> >  @user.update_attribute( :fname, params[:user][:fname] ) &&
> >  @user.update_attribute( :lname, params[:user][:lname] ) &&
> >     flash[:success] = "Profile updated."
> >     redirect_to @user
> > else
> >     flash[:failure] = "ERROR: Profile NOT updated."
> >     @title = "Edit user"
> >     render :action => "edit"
> > end
>
> > > but i could use some advice on a better way to go :)
>
> > You could add some checks to remove the password (and confirmation)
> > field from the params[:user] hash if there's not been a password
> > entered. And/or some validation checks in the model that only run the
> > password validations if a new password and/or confirmation has been
> > provided. Or you could take your user params hash and assign each
> > entry to it's attribute and then call "save" (and only update the
> > password and confirmation if they're not blank in params).... all
> > sorts of ways.... but probably _not_the way you've chosen ;-)
>
> > PS Beware that all those "update_attribute" calls *don't* run validations...

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