2013-02-12 149 views
0

我想将当前项目的id传递给票据控制器(为该项目创建票据),我在下面尝试执行此操作。但是,我这样做是通过以下方式给了我下面的链接:无法将project.id从视图传递到控制器

tickets/new?project_id=8 

...当我只是希望它是这样的:

tickets/new 

...即使我想要的PROJECT_ID在控制器中可访问。

我该怎么做?只是为了澄清:我不希望project_id成为URL的一部分,我只是想以某种方式将它作为参数传递给控制器​​。

<h1><%= @project.title %></h1> <-- the project's attributes is reachable here 

<%= link_to "Create ticket", new_ticket_path(:project_id => @project.id), :class => "btn edit_button" %> 

门票控制器:

从视图

1. class TicketsController < ApplicationController 
2.  def new 
3.   @ticket = Ticket.new 
4.   @id = params[:project_id] 
5. 
6.   @project = Project.find(@id) 
7.  end 
8. end 

的路线会的link_to点,如下所示:

new_ticket GET /tickets/new(.:format)   tickets#new 
+2

'new_ticket_path(:project_id => @project.id)'?你错过了'@'? – fl00r 2013-02-12 19:03:24

+0

我也尝试过,同样的错误。虽然我认为它应该与@所以我会编辑我的Q. – holyredbeard 2013-02-12 19:04:37

+0

html'link_to'生成什么? – fl00r 2013-02-12 19:06:04

回答

0

如果门票贝隆g到项目中,您可能需要考虑嵌套资源。

现在,你的路线可能是这样的:

resources :projects 
resources :tickets 

这会产生像/projects/new/tickets/new路线。你可以做的是这样的:

resources :projects do 
    resources :tickets 
end 

这会给你像/projects/8/tickets/new路线。您通过做new_project_ticket_path(@project)链接到一张新票。路线生成的实际形式是:/projects/:project_id/tickets/:id。所以params [:project_id]会给你这个项目的id。

相关问题