我想知道是否有更清晰或更优雅的方式使用Rails将多个路由转换为一个控制器操作。
#routes.rb
get 'suggestions/proxy', to: 'suggestions#index'
get 'suggestions/aimee', to: 'suggestions#index'
get 'suggestions/arty', to: 'suggestions#index'
...
#suggestion_controller.rb
case request.env['PATH_INFO']
when '/suggestions/proxy'
@suggestions = Suggestion.all.where(:suggestion_type => 'proxy')
when '/suggestions/aimee'
@suggestions = Suggestion.all.where(:suggestion_type => 'aimee')
when '/suggestions/arty'
@suggestions = Suggestion.all.where(:suggestion_type => 'arty')
...
else
@suggestions = Suggestion.all
end
我已经阅读了这个post,但在使用时我一直遇到错误。
如果在这里做的事情不多,那不是什么大不了的事。我在一个我喜欢玩的视频游戏上建立了一个名为 Dirty Bomb 的网站,总共需要列出19个雇佣兵,这就是为什么我想要更多更干净的方式。
感谢。
答案 0 :(得分:1)
绝对有。您可以直接在路线中使用参数。更进一步,您可以直接在查询中使用该参数,而不是使用case语句。
#routes.rb
get 'suggestions/:type', to: 'suggestions#index'
# suggestions_controller.rb
def index
@suggestions = Suggestion.where(suggestion_type: params[:type])
end
将控制器操作建立在参数之后,而不是对路径或请求对象进行任何解释,这总是更好的做法。
希望它有效!