0

私はプロジェクト管理 Web アプリに取り組んでおり、プロジェクトを表示するためのページが必要です。1 つはすべてのプロジェクトを表示するためのもので、もう 1 つはユーザーが所有する (つまり、管理者である) プロジェクトを管理するためのものです。

現在は、'projects_path' (/projects) を使用してプロジェクトの概要ページにアクセスできます。しかし、プロジェクト管理ページには別の URL 'projects/manage' が必要で、ここに助けが必要です。

私は次のことを試しました:

ルート.rb:

match "/projects/manage" => "projects#manage", :as => 'manage_projects'

見る:

<%= link_to "Manage projects", manage_projects_path %>

次のエラーが発生します。

Couldn't find Project with id=manage
app/controllers/projects_controller.rb:62:in `show'

「管理」(projects#manage) を指示するように明示的に設定したのに、「表示」アクションに誘導されるのはなぜですか? どうやら「id」が必要なようですが、特定のプロジェクトではなく、(ユーザーが所有する) すべてのプロジェクトを表示したいので、ここでは当てはまりません。

どうすればこれを解決できますか?

4

3 に答える 3

0

Rails アプリケーションがリクエストを受信したとき

GET /projects/17

コントローラーのアクションに一致するようにルーターに要求します。最初に一致したルートが

match "/projects/:id" => "projects#show"

リクエストは、params に { :id => “17” } を指定して、プロジェクト コントローラーの show アクションにディスパッチされます。

同様に、Rails アプリケーションが受信リクエストを受け取ると、

GET /projects/manage

コントローラーのアクションに一致するようにルーターに要求します。最初に一致したルートが

match "/projects/manage" => "projects#manage", :as => 'manage_projects'

リクエストは、ルートで指定されていない ID を気にすることなく、プロジェクト コントローラーの管理アクションにディスパッチされます。

ただし、プロジェクトの最初の一致ルートがプロジェクトのリソース自体である場合、それは show アクションに進み、所有者と同じように扱わmanageれ、一致がスキップされます。id/projects/:id

したがって、最初に何を与えたか、つまりリソー​​スかマッチかによって異なります。優先順位が重要です。

于 2013-02-11T08:52:14.763 に答える
0

複数のプロジェクトで管理アクションを実行している場合は、コレクション アクションを次のように記述することをお勧めします。

 resources :projects do
   collection do
    get "manage" 
   end 
 end

これにより、ルート /projects/manage が提供され、ルートを管理アクションに自動的に一致させ、すべてが REST 規則に従って行われます。

于 2013-02-11T09:00:12.147 に答える
0

この行

match "/projects/manage" => "projects#manage", :as => 'manage_projects'

の後に追加される可能性が最も高いresources :projectsです。その行をリソースの上に移動すると、うまくいくはずです。何かのようなもの

match "/projects/manage" => "projects#manage", :as => 'manage_projects'
resources :projects

アップデート:

ルートは順序付けされています。ファイルの先頭にあるルートが優先されます。resources :projectsが beforeの場合、 beforeに一致するため、プロジェクト コントローラーの show アクションに進みますmatch "/projects/manage" => "projects#manage", :as => 'manage_projects'/projects/manage/projects/:id/projects/manage

于 2013-02-11T08:40:10.463 に答える