Thanks Phlip - Thanks for the response - I'll play around with your suggestions.
What I was trying to do was something like this project.appointments to display all the appointments for a specific project. The way I have it set up is that a project has many tasks, each task can have many resources (people) and each resource then has appointments. I'm not sure this is the best way to model but I thought it would be easier just keeping one reference to the project_id in the tasks table rather then trying to manage all the links back up to the projects table from the resources and appointments tables. Maybe a bad design decision?? ----- Original Message ---- From: Phlip <[EMAIL PROTECTED]> To: rubyonrails-talk@googlegroups.com Sent: Saturday, September 6, 2008 8:52:49 PM Subject: [Rails] Re: Active record question Mark Studebaker wrote: > I'm not quite sure how to get at this data using Actrive record.. I'm > trying to get all the appointments made for a particular project. I'm > using four models, Projects, Tasks, Resources and Appointments. > > The SQL gets me what I'm looking for but how do I do it using Active Record? > > Select a.* from appointments a > join resources r on r.id = a.resource_id > join tasks t on t.id = r.task_id > join projects p on p.id = t.project_id > Where project_id = 1; Why is project joined in, if project_id comes from tasks? And why is resources joined in? for its data? It does not participate in the links, right? > I can get all the Resources for a project using this but can not get the > appointments. I could loop through the resources getting all the > appointmen ts and tracking them, but that doesn't seem like the right > way to do it. I could also use find_by_sql, but again, that does't seem > right. > > class Project < ActiveRecord::Base > has_many :tasks > belongs_to :customer > has_many :resources, :through => :tasks Appointment.find( :all, :include => :tasks, :conditions => { :'tasks.project_id' => 1} ) In summary, provide enough :has_many => :through to get to the keying table, then put it into your :include and :conditions. Warning: :include will eager-load, which might slow you down with irrelevant data. Alternately... Task.find_all_by_project_id(1).map(&:appointments).uniq (-: -- Phlip --~--~---------~--~----~------------~-------~--~----~ 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 [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---