Having class methods similar to instance methods for associations

Consider the following example.

class Project has_many :tasks end

class Task belongs_to :project end

@project = Project.find(1)

@project.task.find(1) @project.task.build(params[:task]) @project.task.delete(params[:task_id])

In all these cases @project is needed. actually we need only project_id for all the above things.

If the below given things are possible the would save us from the query @project = Project.find(1)

Project.task.find(project_id,task_id) Project.task.build(project_id,params[:task]) Project.task.delete(project_id,params[:task_id])

If this thing can be added to rails it would be great.

Regards, Pankaj

What is the real gain here, except avoiding loading the project record in memory? If that is the reason, we can already do that:

Task.new(params[:task].merge(:project_id => project_id))

I agree this syntax is more verbose, but perhaps it should stay this way so the developer doesn’t have to make too many decisions on which API to use.

The frequent mistake for underexperienced Rails devs using AR associations is that they tend to call “Project.tasks”, forgetting that “tasks” is an association defined on a particular Project instance, not at class level. Adding all associations to class level will just confuse people, IMO.