Thanks for the reply, Mark. One of the assertions in that RailsWay posting was that by using the has_many approach, I'd gain efficiency because of caching. I don't understand enough about caching yet to see why, but let me ask this about using your approach... would the code you show with the :joins clause be more or less efficient than the code I have above in my current home_stats method?
On Dec 17, 4:50 pm, Mark Reginald James <m...@bigpond.net.au> wrote: > lunaclaire wrote: > > I have the following in a model class: > > > class Game < ActiveRecord::Base > > has_many :player_stats > > has_many :players, :through => :player_stats > > > def visitor_stats > > stats = [] > > player_stats.each do |stat| > > stats << stat if stat.player.team.team_code == > > self.visiting_team_code > > end > > stats > > end > > > def home_stats > > stats = [] > > player_stats.each do |stat| > > stats << stat if stat.player.team.team_code == > > self.home_team_code > > end > > stats > > end > > end > > > I understand that this isn't the most efficient or elegant way to do > > things. I gleaned this most recently from the posting at (see his > > Case 3): > > >http://www.therailsway.com/tags/has_many > > > So, I would like to do something like the following, but I'm having a > > problem with the conditions: > > > has_many :visitor_stats, :class_name=>"PlayerStat", :conditions=> > > <what???> > > > the condition here should be something matching "player.team.team_code > > == self.visiting_team_code" in the code I have now. > > > has_many :home_stats, :class_name=>"PlayerStat", :conditions=> > > <what???> > > > and here it should be something matching "player.team.team_code == > > self.home_team_code" in the existing code. > > > The conditions specified need to be something that could go in a SQL > > statement, right? How would I make the conditions work thru the > > associations of a PlayerStat belonging to a Player belonging to a Team > > which has a team_code. And matching it to this Game's > > visiting_team_code or home_team_code > > I don't think what you need can be formulated into normal has_manys. > You'll either have to use the has_many :finder_sql option that > includes joins to the players and teams tables, allowing you to > add the appropriate SQL conditions, or you can keep visitor_stats > and home_stats as methods, but have them call find: > > def home_stats > player_stats.find :all, :select => 'player_stats.*', > :joins => {:player => :team}, > :conditions => "teams.team_code = #{home_team_code}" > end > > -- > Rails Wheels - Find Plugins, List & Sell Plugins -http://railswheels.com --~--~---------~--~----~------------~-------~--~----~ 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 rubyonrails-talk@googlegroups.com To unsubscribe from this group, send email to rubyonrails-talk+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---