2012-06-17 145 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 

和我有文件設置/ edit.html.erb和我聯繫

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

路線

get "settings/edit" 

不起作用爲此,因爲我得到

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不起作用的原因可能是因爲您沒有聲明命名路線。您必須使用:as選項來定義您將使用哪種方法生成此路徑/ URL。

+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 

而且它很可能只是工作。