【问题标题】:Why to add a connection in routes file when using link_to in rails 2为什么在rails 2中使用link_to时在路由文件中添加连接
【发布时间】:2011-06-14 20:24:03
【问题描述】:

我试图完成以下工作:

'用户', :action => '注销' }, :class=> 'menulink2' %>

但它不起作用,它总是将我重定向到一个显示视图。我的 routes.rb 必须有以下内容:

map.connect '用户/注销', :controller => '用户', :action => '注销'

为什么 rails 无法识别我正在传递的操作(“注销”)?

【问题讨论】:

  • 是不是控制器名有问题?
  • 奇怪,和api.rubyonrails.org/v2.3.8一致,你试过用命名路由吗?
  • 是的,实际上我在路由文件中加入了:“map.resources :usuarios”,以便使用命名路由...

标签: ruby-on-rails ruby routes link-to


【解决方案1】:

必须在某处指定该逻辑。必须有一些从哈希{:controller => 'users', :action => 'logout'} 到 url 的映射,并且在 rails 中完成的地方是 routes.rb 文件。在旧版本的 Rails 中,许多 routes.rb 在末尾带有默认值:

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

这样可以指定大多数 :controller, :action 哈希,然后将其路由到 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'})


我猜,但他们这样做的原因可能是控制器的操作实际上只是它的公共方法。

在你的控制器中使用公共方法而不是用于测试目的的 url-end-points 通常很好。

例如,您可以将before_filters 作为您可能想要测试的公共方法,而不必在测试代码中使用@controller.send(:your_before_filter_method)

因此,他们将资源操作列入白名单,并默认使其他操作无法访问。让我看一下rails changelog,看看我是不是正确的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-17
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多