rails 4:活动记录关联:如何列出项目中的所有任务?

rails 4: active record associations: how to list all tasks from a project?

我创建了一个demoapp,用户可以有很多项目,每个项目可以有很多任务。

当我以用户身份登录并访问 project_path 时,会列出该用户的所有可用项目和相关项目。

但是现在,我如何列出该用户与项目相关的所有任务?

这就是我创建 demoapp 的方式:

rails g scaffold Project name:string user_id:integer task_id:integer
rails g scaffold Task name:string project_id:integer
rake db:migrate

[app/models/user.rb]

has_many :projects
has_many :tasks, through: :project

[app/models/project.rb]

belongs_to :user
has_many   :tasks

[app/models/task.rb]

belongs_to :project

[db/seeds.rb]

user = User.create! email: 'user@example.com', password: 'password', password_confirmation: 'password'
project = Project.create! name: 'project 1 @user', user_id: user.id
task = Task.create! name: 'task 1 @project 1 @user', project_id: project.id

user = User.create! email: 'admin@example.com', password: 'password', password_confirmation: 'password'
project = Project.create! name: 'project 1 @admin', user_id: user.id
task = Task.create! name: 'task 1 @project 1 @admin', project_id: project.id
task = Task.create! name: 'task 2 @project 1 @admin', project_id: project.id

和运行耙

rake db:reset

最后我添加了设计授权

[projects_controller.rb]

before_action :authenticate_user!
# replace all Project with current_user.projects

[tasks_controller.rb]

before_action :authenticate_user!

在你的路由文件中,输入如下内容:

  resources :projects do
    resources :tasks
  end

这将为您提供如下所示的路线(以及其他路线):

project_tasks_path(project_id)

相当于:

/projects/:project_id/tasks

该路线将为您提供与该特定项目相关的所有任务。当然,您仍然需要设置控制器以从数据库中获取任务,例如:

@tasks = Project.find(params[:project_id]).tasks