我最近发现的与路由和操作相关的rails中有一个奇怪的行为,具体来说,它位于 rails 2.3.5 上。我有一个控制器,让我们称之为用户。在路由中,我将Users声明为资源。
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
。 有趣的是 ,就是我有其他控制器具有类似的操作并且工作正常。
上述问题的解决方案很简单,请确保添加的Feed高于资源:
map.feed 'users/generated_pdf_report', :controller => 'users', :action => 'generated_pdf_report'
map.resources :users
我的问题是 :任何人都知道为什么rails会像那样?上面的解决方案有点草率,你认为这个问题的最佳实践如上所述。
答案 0 :(得分:0)
如Rails 2 routing guide中所述,您可以像这样添加收集路线:
map.resources :users, :collection => { :generated_pdf_report => :get }
答案 1 :(得分:0)
当rails查看
时/users/generate_report
这正是它用来显示id为generate_report的用户的路径,这就是它的作用,假设你没有告诉它。
您所写内容的缩写替代
resources :users, :collection => {:generate_report => :get}
告诉rails将GET映射到/ users / generate_report到你的generate_report动作