Rails路由:对象ID可以用非反斜杠字符串分隔吗?

时间:2017-03-29 15:52:46

标签: ruby-on-rails ruby-on-rails-4

我想做以下事情:

/products/compare/:product_a_id--vs--:product_b_id

这可能吗?

2 个答案:

答案 0 :(得分:0)

所以,有点hacky,但这是我的解决方案:

resources "products" do
  constraints( compare: /compare/ ) do
    constraints( lambda { |request| Product.find_by(slug: request.params["product_a"]) } ) do
      constraints( compare: /--vs--/ ) do
        constraints( lambda { |request| Product.find_by(slug: request.params["product_b"]) } ) do
          collection do
            get 'compare/:product_a--vs--:product_b', to: 'products#compare', as: 'compare'
          end
        end
      end
    end
  end
end

耙路线:

rake routes | grep compare

compare_products GET       

/products/compare/:product_a--vs--:product_b(.:format)       products#compare

答案 1 :(得分:0)

您可以使用" id"但是你喜欢。

在控制器操作中,您可以根据字符串

将其拆分
def compare
  product_a_id, product_b_id = params[:id].split('--vs--')
  ...
end

在路线中,抛出约束以确保--vs--存在。

:constraints => { :id => /\d+--vs--\d+/ }