Can 'tasks' belong to 'user' and 'project' at the same time?

Hello All!

I have 'project' and 'task' model that is set to belongs_to 'user', and 'user' has_many 'projects' and 'task', and I have the config/ routes.db using

map.resource :users, :has_many [:projects, :tasks]

I can use all seven actions in the users controllers to manipulate projects, for instance,

http://localhost:3000/users/1/projects

renders the ProjectController's index action with index.html.erb showing all projects of user 1.

Same goes on for tasks. If I go to

http://localhost:3000/users/1/tasks

the browser shows up the index list of all tasks belonging to this user 1

Would you be kind enough to show me some hints to realizing a functionality that when I go to

http://localhost:3000/users/1/projects/1/tasks

to see all the tasks in project 1 of user 1.

Thank You Very Much!

http://localhost:3000/users/1/projects/1/tasks

I think you are mis-interrupting the meaning of that URI. users/1/ projects/1/tasks would mean "Collection of tasks for project with id == 1 under the user with id == 1."

In other words "users/1/project" is the collection of projects for a user with id == 1. Then projects/1/tasks is the collection of tasks for a project with id == 1. So if projects/1 is not associated to users/1 then users/1/projects/1/tasks would return an empty collection because users/1/projects/1 would not be found.

This would mean your database schema would be:

User: has_many :projects Project: has_many :tasks

Project: belongs_to :user

Task: belongs_to :project

Which is not the structure of the schema you presented.

Hi Robert,

Let me make sure I am getting this right:

http://dns/users/1/projects/1/tasks

returns the collection of tasks with the criteria requiring that these tasks belong to project 1 and these tasks belong to user 1

So if we put it in context, will these url find the following sentence: I want to see Nik's Cleaning Garage tasks where Nik is the user, Cleaning Garage is HIS project, the tasks are the get the oil stains and buy more shelves and etc.

Thank you so much for your time.

Nik