Move update_attributes into class and check for non-nil params to update only
class Customer
  def update_customer params
    update_attributes(:city_id =&gt; params[:city],
                      :zip_code =&gt; params[:zip],
                      :first_name =&gt; params[:first_name],
                      :last_name =&gt; params[:last_name],
                      :phone =&gt; phone_number_digest(params[:phone]),
                      :street1 =&gt; params[:street1],
                      :street2 =&gt; params[:street2],
                      :email =&gt; params[:email])
  end

  def phone_number_digest *numbers
    numbers.map{ |s| s.gsub!(/\D+/,'')}
  end

end


In your controller

@cust = Customer.find(params[:customer_id])
@cust.update_customer(params)


This keeps it relatively clean and logically separates your persistence logic.

Also to answer your questions.

@cust = Customer.find(params[:customer_id])
if @cust.update_customer(params)
  #do something
else
  #do something else
end



Ruby executes the code in conditionals, so you could just have it like I have above.
you would probably want to do this logic in the controller, as only allow the keys with non nil params to work.  This one is bit trickier, but definitely can be done.  Perhaps you want to build your sanitized hash of params then pass it in.  in that case, perhaps the ** operator(double splat for keyword args) would be useful.
Definitely worth your time. Naming is quite possibly one of the most important ideas in programming.  You want to read code that you worked on a year or 2 ago without having to dive into the internals, and if you properly name you classes and methods, it becomes much simpler.