我在rails中有以下模型:
class Task < ActiveRecord::Base
attr_accessible :description, :name, :project
belongs_to :project
validates :name, :presence => true
end
class Project < ActiveRecord::Base
attr_accessible :name
has_many :tasks
end
我有一个列出可用项目的视图单击任何项目我要打开一个列出所单击项目中所有任务的页面。现在的问题是如何传递项目ID?我还希望项目ID在之后的许多控制器中可见,所以我认为我应该使用会话变量或类似的东西?
答案 0 :(得分:3)
您想要使用嵌套资源
的routes.rb
resources :project do
resources :tasks
end
允许您执行<%= link_to 'Tasks', tasks_project_path(@project) %>
然后你有一个控制器来完成任务,参数包括:project_id /projects/:project_id/tasks
然后在控制器中:
class TasksController < ApplicationController
def index
@project = Project.find(params[:project_id])
@tasks = @project.tasks
end
end
答案 1 :(得分:2)
你可以这样做:
<%= link_to 'Get tasks of project', {:controller => :tasks, :action => :list_project_tasks}, :params => {:project_id => project.id} %>
此处list_project_tasks
是tasks_controller
def list_project_tasks
@project_tasks = Project.find(params[:id]).tasks
end
或者:
您可以修改index
的{{1}}:
tasks_controller
答案 2 :(得分:0)
1)点击任何一个项目,我想打开一个列出所点击项目中所有任务的页面。
- 为此,我建议使用Rails提供的link_to帮助程序,并通过Rails路由链接到该项目。例如,您的视图将列出所有项目,并且每个项目项目将使用<%= link_to project.name, @project %>
或<%= link_to project.name, project_path(@project) %>
您可以通过在命令行中键入rake routes来查看路由列表。
2)我不确定你究竟是什么意思,但如果你使用的url是/ projects / 12 /下面的任何资源及其控制器(例如/ projects / 12 / tasks / 15)假设您的路由设置为嵌套路由,则可以以params [:project_id]的形式访问project_id。