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
我创建了一个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