I've settled on this for now:

 def update(user)
   @user = User.new
   @user.attributes = pick(user,
[:display_name, :password, :password_confirmation])

   # or in one line
  @user = User.new(pick(user,
[:display_name, :password, :password_confirmation])
   ....
  end

 pick is inherited in Application as

  def pick(hash, keys)
    result = {}
    return result if hash == nil
    keys.each do |key|
      result[key] = hash[key]
    end
    return result
  end

This way I don't have to patch Hash or NilClass

thanks, Jon


On Dec 5, 11:29 pm, Jon Hancock <[EMAIL PROTECTED]> wrote:
> thanks Jacques and Alex.
> both these lightweight examples are interesting.
> I keep thinking I'm closing in on the right set of patterns.
>
> Jon
>
> On Dec 5, 10:40 pm, Alex Neth <[EMAIL PROTECTED]> wrote:
>
> > On Dec 5, 4:12 pm, Jacques Crocker <[EMAIL PROTECTED]> wrote:
>
> > > Here's my current simple solution:
>
> > > Monkey with Hash:http://gist.github.com/32279
>
> > > Then I explicitly specify which fields I want to save in my controller
> > > action:
>
> > > def update(id)
> > >   @person = Person.get(id)
> > >   @person.attributes = params[:person].choose(:name, :email)
> > >   if @person.save
> > >     redirect resource(@person)
> > >   else
> > >     render :edit
> > >   end
> > > end
>
> > Not sure about monkeying with Nil, but it's a nice lightweight
> > solution.
>
> > Agreed that Object.create(params[:object]) is frightening.  I
> > shuddered the first time I saw it in Rails, then got a bit too used to
> > it.  Another less intrusive method:
>
> >  def update(id, person)
> >   [EMAIL PROTECTED] = Person.get(id)
> >   [EMAIL PROTECTED]({:name, :email}.each{|k|person[k]})
> > ...
>
> > A bit strange having a variable called person that is really a hash,
> > but doesn't seem to be a way to rename that....
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"merb" 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/merb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to