2012-06-17 12 views
6

私はルートを理解するのがとても難しいです。誰かが私を助けてくれることを願っています。Rails:カスタムコントローラアクションへのルート

は、ここに私のカスタムコントローラ

class SettingsController < ApplicationController 
    before_filter :authenticate_user! 

    def edit 
     @user = current_user 
    end 

    def update 
     @user = User.find(current_user.id) 
     if @user.update_attributes(params[:user]) 
     # Sign in the user bypassing validation in case his password changed 
     sign_in @user, :bypass => true 
     redirect_to root_path 
     else 
     render "edit" 
     end 
    end 
end 

だと私は

get "settings/edit" 

が動作しないファイルの設定/ edit.html.erbと私のリンク

<li><%= link_to('Settings', edit_settings_path) %></li> 

ルートを持っていますこれのために、私は得るから

undefined local variable or method `edit_settings_path' for #<#<Class:0x00000001814ad8>:0x00000002b40a80> 

これはどのようなルートですか?私はそれを理解することはできません。私が代わりにパスの「/設定/編集」を置けば、それは、すぐにリソース名が

Thxを

+0

最初にあなたが試した経路を教えてください – rubish

+0

私の質問 – Mexxer

答えて

16

が何をすべき次の設定/編集する前に置かれているので、私は他のリソースページ上だと台無し:

get 'settings/edit' => 'settings#edit', :as => :edit_settings 
# you can change put to post as you see fit 
put 'settings/edit' => 'settings#update' 

あなたがリンクで直接/settings/editを使用する場合は、パス内の先頭に追加されている他のリソース名に問題があるべきではありません。ただし、スラッシュ(settings/edit)がないと、その問題が発生する可能性があります。

edit_settings_pathが機能していない理由は、名前付きルートを宣言していない可能性があります。このパス/ URLを生成するメソッドを定義するには、:asオプションを使用する必要があります。

+0

ありがとうございました!私は本当にその前に/を忘れてしまった。私はあなたのソリューションを使用して終わった:) – Mexxer

4

明示的にルートを定義する場合は、

get 'settings/edit' => 'settings#edit', :as => edit_settings 

のようなものを使用します。この文は、GETリクエストが/編集を設定するための受信されたとき、SettingsController#編集メソッドを呼び出すことを定義し、ビューその'edit_settings_path'を使用してこのリンクを参照できます。

少し時間をかけてthe Rails guide on routingと読んでください。他のどのリファレンスよりも優れたルーティングを説明しています。

アプリケーションに定義されているすべてのルートの詳細を一覧表示するrake routesタスクも忘れないでください。

1

resources :settings 

にあなたのルートを変更し

そして、それはおそらくうまく動作します。