如何在rails上的ruby中制作自定义路由

时间:2015-05-01 06:30:40

标签: ruby-on-rails routes

我有一个网址http://localhost:3000/features?feature_group=everyone,我正在尝试通过路由制作网址http://localhost:3000/features/for-everyone

4 个答案:

答案 0 :(得分:2)

您可以将所需的路线定义为

get '/features/:feature_group' => 'features#index'

因此,在行动中,params [:feature_group]将在您的案例中具有“分析”

或者您可以使用收集路线,例如

 resources :features do
   collection do
     get :feature_group
   end
 end

因此,您需要在功能控制器中执行feature_group操作。要了解rails路由,请参阅http://guides.rubyonrails.org/routing.html

答案 1 :(得分:0)

就我个人而言,我会使用您的索引控制器的初始feature路由,并使用集合在其中执行嵌套路由,例如:

 resources :features do
    collection do
      get :feature_group
      get :feature_xxxxx
    end
  end

什么是酷的,如果params [:feature_group]为零,你可以在你的控制器中做什么?还是在场?或等于“某些单词”使您的索引页面具有不同的记录,或者取决于您想要做什么。

答案 2 :(得分:0)

好的,我可以在constraints

的帮助下完成
get 'features' => redirect('/features/for-everyone'), :constraints => lambda{|req| req.params["feature_group"] == "everyone"}

get 'features/for-everyone' => "Features#index"

但是在过程中params [“feature_group”]迷路了。所以我需要使用默认值

传递路径中的参数
get 'features/for-everyone' => "Featues#index", :defaults => { :feature_group => "everyone" }

答案 3 :(得分:0)

试试这个

get 'features' => redirect('/features/for-everyone?%{params}'), :constraints => lambda{|req| req.params["feature_group"] == "everyone"}

redirect('/features/for-everyone?feature_group=%{feature_group}'), :constraints => lambda{|req| req.params["feature_group"] == "everyone"}

我测试了这个场景及其工作正常。