【问题标题】:Rails always routes an action to show action, and the action it self becomes the idRails 总是路由一个动作来显示动作,并且它自己的动作成为 id
【发布时间】:2012-06-14 06:53:53
【问题描述】:

我最近发现 Rails 中有一个奇怪的行为与路由和操作有关,具体来说,它在 rails 2.3.5 上。我有一个控制器,我们称之为用户。在路由中,我将用户声明为资源。

map.resources :users

在控制器中,我有标准操作:index, show, edit, update & destroy。此外,我还添加了其他操作来满足某些要求。

def generated_pdf_report
    # do something
end

问题是,当我转到页面 /users/generated_pdf_report 时,我在控制台上得到了这个:

Processing UsersController#show (some timestamps) [GET]
  Parameters: {"action"=>"show", "id"=>"generated_pdf_report", "controller"=>"users"}

如您所见,服务器将请求路由到方法show,而不是方法generated_pdf_report有趣的是,我有其他控制器具有类似的操作并且工作正常。

上述问题的解决方法很简单,确保添加的提要在资源之上:

map.feed 'users/generated_pdf_report', :controller => 'users', :action => 'generated_pdf_report'
map.resources :users

我的问题是:有人知道为什么 Rails 会这样吗?上述解决方案有点草率,您认为针对上述问题的最佳做法是什么。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    正如 Rails 2 routing guide 中所述,您可以像这样添加收集路线:

    map.resources :users, :collection => { :generated_pdf_report => :get }
    

    【讨论】:

      【解决方案2】:

      当rails看着

      /users/generate_report
      

      这正是它用来显示 id 为 generate_report 的用户的路径,所以它就是这样做的,假设你没有告诉它。

      你写的更短的替代方法是

      resources :users, :collection => {:generate_report => :get}
      

      这告诉 Rails 将 GET 映射到 /users/generate_report 到您的 generate_report 操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多