Ruby on Rails多对一关系下“最佳10条结果”路由配置咨询
Rails 实现指定Task的Top10 Results路由方案
完全可以按照你的需求实现,以下是几种对应不同URL格式和助手方法的配置方式:
1. 对应URL /tasks/:task_id/show_best_results + 助手best_results_for_task_path(task_id)
在config/routes.rb中添加:
get '/tasks/:task_id/show_best_results', to: 'results#best_for_task', as: 'best_results_for_task'
2. 对应URL /tasks/:task_id/show_best_results + 助手show_best_task_results_path(task_id)
调整路由的as参数即可:
get '/tasks/:task_id/show_best_results', to: 'results#best_for_task', as: 'show_best_task_results'
3. 对应URL /results/show_best_for_task/:task_id + 自定义助手名
如果想用这个URL格式,路由配置如下:
get '/results/show_best_for_task/:task_id', to: 'results#best_for_task', as: 'best_results_for_task' # 或者换成你想要的助手名:as: 'show_best_task_results'
4. 符合Rails资源风格的嵌套路由(推荐)
如果想遵循RESTful资源设计,可以在tasks资源下嵌套这个动作:
resources :tasks do # URL为/tasks/:id/show_best_results,助手为best_results_for_task_path(task) get 'show_best_results', on: :member, to: 'results#best_for_task', as: :best_results_for_task end
控制器实现
最后在ResultsController中添加对应的动作,处理获取Top10结果的逻辑:
class ResultsController < ApplicationController def best_for_task @task = Task.find(params[:task_id]) # 根据你实际的排序字段调整,比如按score降序取前10 @best_results = @task.results.order(score: :desc).limit(10) end end
内容的提问来源于stack exchange,提问作者epeleg
相关产品推荐
相关产品推荐

