4

我在 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 在许多控制器中可见,所以我认为我应该使用会话变量或类似的东西?

4

3 回答 3

3

您想使用嵌套资源

路线.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
于 2013-03-27T17:44:41.090 回答
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

或者:

您可以修改您indextasks_controller

<%= link_to 'Get tasks of project', {:controller => :tasks, :action => :index}, :params => {:project_id => project.id} %>

def index
  @tasks = Project.find(params[:project_id]).try(:tasks) || Task.all
end
于 2013-03-27T17:41:16.667 回答
0

1)单击任何项​​目时,我想打开一个页面,其中列出了单击项目中的所有任务。- 为此,我建议使用 Rails 提供的 link_to 帮助程序,并通过 Rails 路由链接到项目。例如,您的视图将列出所有项目,并且每个项目项将使用<%= link_to project.name, @project %>或显示<%= link_to project.name, project_path(@project) %>

您可以通过在命令行中键入 rake routes 来查看路由列表。

2)我不确定您的意思,但是如果您使用的网址类似于 /projects/12/ 任何资源及其下面的控制器(例如 /projects/12/tasks/15)可以访问 project_id 为params[:project_id],假设您的路线设置为嵌套路线。

于 2013-03-27T17:42:18.133 回答