On Nov 28, 2008, at 1:51 PM, Scott Peterson wrote:
> Just learning the framework.  I apologize if this is in the worng  
> forum.
> I looked around for something like "Beginner's Questions" but didn't  
> see
> it.
>
> I'm building a simple application which will let players register  
> for an
> event.
>
> So, I've generated a player_admin controller and pointed it to my
> players table.  Worked great, I'm off and running.
>
> After learning about hashing the password, I decided I might like to  
> add
> a convenience method to the Player (attached) which would give  
> fullname.
> My ultimate goal of this is to list the players, obviously.
>
> In the player_admin/show view, I tried <%= @player.fullname %>, got an
> error which said fullname not defined.  I also just dumped the player
> object using debug(), which didn't show fullname as an attribute.
>
> I also tried it as a no-param method [i.e., fullname() ], without  
> luck.
>
> After puzzling a while, I came across the notion of helpers, and  
> decided
> to try the method in the player_admin_helper:
>
> def fullname
>  @player.first_name + " " + @player.last_name
> end

You really want to have this in your Player model.  It will look  
almost the same:

class Player
   def fullname
     self.first_name + " " + self.last_name
   end
end

or perhaps:

class Player
   def fullname
     "#{self.first_name} #{self.last_name}"
   end
end

>
>
> Worked like a charm. I kind of understand, it's because the show view
> was invoked by the player_admin controller, so he has access to the
> player_admin_helper, but that won't help me when I'm off in some other
> part of the application.
>
> I don't understand where I went wrong when just trying to get a  
> similar
> method directly in the player object.  Is there something  
> funadmentally
> wrong with how I'm thinking about Ruby objects, that in the Player  
> model
> wasn't really an appropriate place to try that?
>
> Thank you.

How did the method look when you tried to define it within your Player  
model?  If you still tried to refer to @player rather than self, that  
may be your mental hurdle.  You're defining a new attribute of a  
model.  The rest of the system shouldn't care if the storage behind  
the model changes to hold the fullname and the other methods become:

class Player
   def first_name
     self.fullname.split(' ').first
   end
   def last_name
     self.fullname.split(' ').last
   end
end

(NOTE: I'm not suggesting that this should happen, but only that the  
rest of the application can continue to reference @player.first_name,  
@player.last_name, or @player.fullname without having to know what  
really sits behind the model.)

-Rob

Rob Biedenharn          http://agileconsultingllc.com
[EMAIL PROTECTED]



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