2013-10-08 15 views
0

Rails的4.0/2.0的Rubyurl_for與應用控制器動作

我想轉換爲Rails 4.在佈局文件一個Rails 2個應用,我有一個腳本來調用應用程序控制器的動作(以重新加載會話變量),然後在單擊佈局中的刷新按鈕時刷新頁面。

我無法找出如何引用任何行動應用控制器:

<%= url_for(:action => 'refresh_users', :controller => 'application') %> 

我已經試過「url_for」一些不同的方法,包括不指定控制器。

對於每一個我已經試過了,我總是得到一個無路由錯誤(「沒有路由匹配{:動作=>」 refresh_users「:控制器=>‘應用程序’}」)

上午什麼我在這裏做錯了嗎?

<script type="text/javascript"> 
    var refresh_user_session = function() { 
      $.get(
       "<%= url_for(:action => 'refresh_users', :controller => 'application') %>", 
        function(data){ 
         alert('You access rights have been re-loaded, the page will now re-load.'); 
        location.reload(); 
        } 
      ); 
     return false 
    } 
</script> 

謝謝!

+1

通常應用程序控制器不用於路由!你如何在你的routes.rb中做到這一點? – phoet

+0

?這不是路由,它只是在應用程序控制器中調用一個不顯示任何內容的動作。 url_for只是在那裏寫出JavaScript的使用行爲的路徑。如果該操作代碼不在應用程序控制器中,則它必須存在於應用程序中的每個控制器中。在Rails 2.x中它只是一直工作。 – Reno

+0

如果你不通過路線暴露它,怎麼會打電話給它? – phoet

回答

0

我認爲你對軌道佈線有誤解。

在導軌2中,您通常在您的路線match ':controller(/:action(/:id(.:format)))'中有類似的東西,它允許您在任何控制器上調用任何操作。

這將允許您在您的ApplicationController中定義一個公共方法,並通過繼承使其可以被應用程序中的任何控制器訪問。

我認爲這應該仍然在rails4中工作。由於match已被棄用,你正在做一個get請求,我會把get ':controller(refresh_users(.:format))'這樣的東西放在routes.rb。這將允許您在任何控制器上撥打/XYZ/refresh_users.json

我想知道,但是,爲什麼你真的想在每個控制器中有一個行動。這是非常罕見的!