Rails 4路由传递默认参数,而不必将其包含在url上

时间:2016-01-25 04:08:02

标签: ruby-on-rails routes

我在 routes.rb

中有这条路线
get "/whats_new/:only_new" => 'products#index', as: :whats_new_page_products, :defaults => { :only_new => true }

及其产生:

localhost:3000/whats_new/true

有没有办法只将它显示为:

localhost:3000/whats_new/

提前致谢

3 个答案:

答案 0 :(得分:1)

你可以做到

get ':whats_new' => 'products#index', as: :whats_new_page_products, :defaults => {:whats_new => true }

这应该产生你想要的结果。每当您params[:only_new]现在需要params[:whats_new]

时,请记住您的控制器操作

答案 1 :(得分:1)

尝试:

String gotText = editText.getText() editText.setText(gotText + result)

这将创建一个可选参数,您可以在控制器中查看该参数。

现在,用户可以向get "/whats_new(/:only_new)" => 'products#index', as: :whats_new_page_products/whats_new发出请求(用任何参数值替换为true)。在您的控制器中,您可以检查params [:only_new]是否为真。

答案 2 :(得分:0)

#config/routes.rb
get :whats_new, to: "products#index", as: :whats_new_page_products #-> url.com/whats_new

#app/controllers/products_controller.rb
class ProductsController < ApplicationController
   def index
      if /^(whats_new)$/ !~ request.path
        @products = Product.only_new
      else
        @products = Product.all
      end
   end
end

我认为您不需要传递参数来识别请求。以上是有点hacky,但应该工作。