0

現在のプロジェクトの 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
4

1 に答える 1

0

チケットがプロジェクトに属している場合は、リソースのネストを検討することをお勧めします。

現在、ルートはおそらく次のようになっています。

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を提供します。

于 2013-02-12T19:28:42.720 に答える