2011-06-14 82 views
0

我試圖完成以下使用的link_to時添加在路由文件的連接:爲什麼在軌道2

<%=的link_to「退出」,{:控制器 =>「用戶」, :action =>'logout'},:class =>'menulink2'%>

但它沒有工作,它總是將我重定向到show view。我必須有以下我的routes.rb:

map.connect '用戶/註銷', :控制器=> '用戶',:動作=> '退出'

爲什麼沒有欄杆識別我正在傳遞的操作('註銷')?

+0

這不是控制器名稱的問題嗎? – apneadiving 2011-06-14 20:31:36

+0

對不起,是一個類型-O – tiiin4 2011-06-14 20:38:54

+0

奇怪,它符合http://api.rubyonrails.org/v2.3.8/您是否嘗試使用命名路線? – apneadiving 2011-06-14 20:53:28

回答

0

該邏輯必須在某處指定。必須將散列{:controller => 'users', :action => 'logout'}映射到一個url,並且在rails中完成的位置是routes.rb文件。在舊版本的軌道許多routes.rb帶着末默認:

map.connect ':controller(/:action/(:id(.:format)))'

這將讓這個幾乎任何:控制器:動作哈希可以指定,然後發送到host.url/:controller/:action


有了更現代的版本,基於資源的路由是大熱門,和控制器不遵循Rails的REST約定(即只有:index,:show,:create,:new,:edit,:update,:destroy方法),一般必須有他們的路線以某種方式明確指定。

(無論是與map.resources :users, :collection => {:get => :logout}map.connect('some_url', :controller => 'users', :action => 'logout'})


我猜,但他們這樣做的原因可能是控制器的行動其實只是它的公共方法。

在您的控制器中使用公共方法通常不錯,它們不是用於測試目的的網址結束點。

例如,您可以將before_filter作爲公共方法,您可能需要測試而不必在測試代碼中使用@controller.send(:your_before_filter_method)

因此,他們將資源操作列入白名單,並使其他人無法訪問。讓我看看rails更新日誌,看看我是否正確。