Search code examples
ruby-on-rails-3for-loopparent

Rails 3 create new child for a specific parent


Hey all! Just joined up on stack overflow, as it has been a helpful resource while starting to learn about Ruby on Rails 3.

I can't seem to find one particular answer though, and maybe I'm barking up the wrong tree for all I know, but hopefully you folks can sort me out here. First some info on what I'm working with:
- In my web app I have 2 models: Projects and Tasks in a one-to-many relationship.
- Projects has many Tasks, and Tasks belong to Project
- Tasks IS NOT a nested resource, as users need to be able to see all current tasks, regardless of which project they are for.
- routes.rb therefore looks like this right now:
resources :projects
resources :tasks

In the project show view I display a list of tasks associated with that project. below that there is a link_to for creating a new task that looks like <%= link_to 'New Task', new_task_path, :class => "new-btn" %>. The link_to takes user to the new view for creating a new task. The rendered _form view starts with: <%= form_for(@task) do |f| %>.

Now, I think I need to pass the project id from the project show view, to the new task view: but, this is where I am getting lost and possibly, a bit mixed up.

Could someone please point me in the right direction: maybe to a resource outlining all steps involved in doing this, or maybe even provide an outline of the steps involved in the process here.

Many thanks!


Solution

  • If current_user returns User object then you should be able to call

    current_user.projects 
    

    to get all user's projects.

    Defining a relation between user and task may be working (though I am not sure this one).

    #models/user.rb
    has_many :projects
    has_many :tasks, :through => :projects
    

    In this case simply

    current_user.tasks 
    

    should return user's tasks