Rails:将参数从视图传递到控制器
我在轨道中有以下型号:
class Task true end class Project < ActiveRecord::Base attr_accessible :name has_many :tasks end
我有一个列出可用项目的视图单击任何项目我要打开一个列出所单击项目中所有任务的页面。 现在的问题是如何传递项目ID? 我还希望项目ID在之后的许多控制器中可见,所以我认为我应该使用会话变量或类似的东西?
您想要使用嵌套资源
的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
你可以这样做:
<%= 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
要么:
您可以修改tasks_controller
index
:
<%= 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
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)可以访问project_id params [:project_id],假设您的路由设置为嵌套路由。