ElegantRails - 一个控制器动作的多个路由

时间:2017-11-09 04:32:34

标签: ruby-on-rails routing

我想知道是否有更清晰或更优雅的方式使用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个雇佣兵,这就是为什么我想要更多更干净的方式。

感谢。

1 个答案:

答案 0 :(得分:1)

绝对有。您可以直接在路线中使用参数。更进一步,您可以直接在查询中使用该参数,而不是使用case语句。

#routes.rb

get 'suggestions/:type', to: 'suggestions#index'

# suggestions_controller.rb

def index
   @suggestions = Suggestion.where(suggestion_type: params[:type])
end

将控制器操作建立在参数之后,而不是对路径或请求对象进行任何解释,这总是更好的做法。

希望它有效!