我試圖完成以下使用的link_to時添加在路由文件的連接:爲什麼在軌道2
<%=的link_to「退出」,{:控制器 =>「用戶」, :action =>'logout'},:class =>'menulink2'%>
但它沒有工作,它總是將我重定向到show view。我必須有以下我的routes.rb:
map.connect '用戶/註銷', :控制器=> '用戶',:動作=> '退出'
爲什麼沒有欄杆識別我正在傳遞的操作('註銷')?
我試圖完成以下使用的link_to時添加在路由文件的連接:爲什麼在軌道2
<%=的link_to「退出」,{:控制器 =>「用戶」, :action =>'logout'},:class =>'menulink2'%>
但它沒有工作,它總是將我重定向到show view。我必須有以下我的routes.rb:
map.connect '用戶/註銷', :控制器=> '用戶',:動作=> '退出'
爲什麼沒有欄杆識別我正在傳遞的操作('註銷')?
該邏輯必須在某處指定。必須將散列{: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更新日誌,看看我是否正確。
這不是控制器名稱的問題嗎? – apneadiving 2011-06-14 20:31:36
對不起,是一個類型-O – tiiin4 2011-06-14 20:38:54
奇怪,它符合http://api.rubyonrails.org/v2.3.8/您是否嘗試使用命名路線? – apneadiving 2011-06-14 20:53:28