0

导轨 4.0 / 红宝石 2.0

我正在尝试将 Rails 2 应用程序转换为 Rails 4。在布局文件中,我有一个脚本来调用应用程序控制器中的操作(以重新加载会话变量),然后在布局中的刷新按钮为时刷新页面点击。

我无法弄清楚如何引用应用程序控制器中的任何操作:

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

我尝试了 'url_for' 几种不同的方法,包括不指定控制器。

对于我尝试过的每一种方式,我总是得到一个无路由错误(“没有路由匹配 {:action=>"refresh_users", :controller=>"application"}")

我在这里做错了什么?

<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>

谢谢!

4

1 回答 1

0

我认为您对此处的 Rails 路由有误解。

在 Rails 2 中,您通常在您的路线中有这样的东西,match ':controller(/:action(/:id(.:format)))'它允许您在任何控制器上调用任何操作。

这将允许您在您的中定义一个公共方法,ApplicationController并通过继承,使其可供应用程序中的任何控制器访问。

我认为这应该仍然适用于 rails4。由于match已弃用并且您正在执行get请求,因此我会get ':controller(refresh_users(.:format))'routes.rb. 这将允许您调用/XYZ/refresh_users.json任何控制器。

我想知道......为什么你真的想在每个控制器中都有一个动作。这是非常罕见的!

于 2013-10-08T16:26:15.560 回答