我最近发现 Rails 中有一个奇怪的行为与路线和动作有关,特别是在rails 2.3.5上。我有一个控制器,我们称之为用户。在路线中,我将用户声明为资源。
map.resources :users
在控制器内,我有标准动作:index, show, edit, update & destroy
. 此外,我还添加了其他操作来满足某些要求。
def generated_pdf_report
# do something
end
问题是,当我转到 page 时/users/generated_pdf_report
,我在控制台上得到了这个:
Processing UsersController#show (some timestamps) [GET]
Parameters: {"action"=>"show", "id"=>"generated_pdf_report", "controller"=>"users"}
如您所见,服务器将请求路由到 methodshow
而不是 method generated_pdf_report
。有趣的是,我有其他控制器具有类似的操作并且工作正常。
上述问题的解决方案很简单,确保添加的提要在资源之上:
map.feed 'users/generated_pdf_report', :controller => 'users', :action => 'generated_pdf_report'
map.resources :users
我的问题是:任何人都知道为什么 rails 会这样吗?上述解决方案有点草率,您认为针对上述问题的最佳实践是什么。