url_for与应用程序控制器操作

时间:2013-10-08 13:03:55

标签: ruby-on-rails-4

Rails 4.0 / Ruby 2.0

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

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

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

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

对于我尝试过的每一种方式,我总是得到一个无路由错误(“无路由匹配{:action =&gt;”refresh_users“,:controller =&gt;”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>

谢谢!

1 个答案:

答案 0 :(得分:0)

我认为你对这里的rails路由有误解。

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

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

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

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