3

ではroutes.rb

resources :projects

次のルートを与える

/projects/
/projects/:id

次のようなネストされたリソースを使用している間

resources :projects do
  resources :photos
end

次のルートを提供します

/projects/
/projects/:id
/projects/:project_id/photos
/projects/:project_id/photos/:id

これは、コントローラー固有の before_filter を作成する必要があるため、問題が発生しparams[:id]ますparams[:project_id]Project.find(params[:project_id] || param[:id])

ルートをすべてのルートに変更する方法はあります:project_idか?

/projects/
**/projects/:project_id**
/projects/:project_id/photos
/projects/:project_id/photos/:id
4

3 に答える 3

2

もう 1 つの方法は、ApplicationController の :project_id で現在のプロジェクトを見つけるメソッドを定義することです。

def current_project
  @current_project ||= Project.find params[:project_id]
end

そして、このメソッドを ProjectController で再定義します

def current_project
  @current_project ||= Project.find params[:id]
end

current_project次に、すべてのコントローラーのフィルターで使用できます

于 2012-03-23T10:22:36.863 に答える
1

リソースの ID パラメータの名前は変更できません

ただし、リソースの前に非安らかなパスとして再定義できます

get "projects/:project_id" => "projects#show"
# etc. for all other 3 methods
于 2012-03-22T19:59:57.667 に答える
0

あなたが探しているのは浅いネスティングだと思います: http://edgeguides.rubyonrails.org/routing.html#nested-resources

2.7.2 浅いネスティングを見下ろす

于 2013-08-01T18:45:59.510 に答える