2010-11-24 26 views
26

私は、コントローラの名前空間に&コントローラを作成しました。リンクヘルパをこれらの新しいルートで使用する際に問題が発生しました。リンクに名前空間を使用したlink_toを使用

私は/ admin/projectsにつながるadmin_projects_pathのような新しいパスヘルパーがあることがわかります。しかし、私は、名前空間内のこれらのオブジェクトのためのショー、編集、破壊などのパスにリンクするのに問題があります。それ、どうやったら出来るの?

+1

この正確な使用例については、この正確な質問をするためにここに来ました。 +1(より良い答えは時間の経過とともにそれ自体が表示されていることがわかります) – Kristian

答えて

30

あなたのルートのすべてがrake routesに記載されていることがわかります。それらを名前で使用して適切な名前空間を得ることができます。手動で:controller:actionを渡す場所で自動検出を使用すると、検出されたとおりに機能しません。

ルートにnew_thingと表示されている場合は、適切なパラメータを使用してnew_thing_pathになります。例えば:

link_to('New Project', new_admin_project_path) 
link_to('Projects', admin_projects_path) 
link_to(@project.name, admin_project_path(@project)) 
link_to(@project.name, edit_admin_project_path(@project)) 
link_to(@project.name, admin_project_path(@project), :method => :delete) 
72

すると、あなたがRailsの3を使用している場合は、長いヘルパーのパス名を書くのではなく、変数を使用して管理者のネームスペースを使用することができます。

ビュー:

<td><%= link_to 'Show', [:admin, project] %></td> 
<td><%= link_to 'Edit', [:edit, :admin, project] %></td> 
<td><%= link_to 'Destroy', [:admin, project], confirm: 'Are you sure?', method: :delete %></td> 

コントローラ:パラメータとしてURLオプション、およびそれらの例には、あなたがパスを生成するためになurl_forを使用することができます:

redirect_to [:admin, @project] 
+0

答えは間違いなくこれに更新する必要があります! –

+0

editアクションのために、何らかの理由で '<%= link_to 'Edit'、[:admin、:edit、project]%>'を実行しなければなりませんでした。 –

+0

+1の答えは、私はこれが受け入れられた答えとそのより正確なものとして更新されるべきだと思います。 – sameera207

1

いくつかの方法が必要と

icon(:url => url_for(:controller => "admin/projects", :action => "edit", :id => @project), 
    :type => :edit) 
+1

Railsは 'edit_admin_project_url'でURLパスの自動ヘルパーを提供します。 – rxgx

関連する問題