如何在rails上的ruby中生成动态URL?

时间:2018-02-28 11:40:05

标签: ruby-on-rails routes

我在一个控制器中有一个xyz方法。现在我有一个url'buy-m-get-n',它将调用xyz动作。

get "/buy-m-get-n" => "store#xyz"

现在我想为不同的m和n值调用相同的动作。例如:'buy-2-get-3','buy-4-get-5'。 m,n <= 10

我在routes.rb,

中试过这个
[1..10].each do |x|
  [1..10].each do |y|
    get "/buy-#{x}-get-#{y}" => "store#xyz"
  end
end

但它给了我新的网址,

/buy-1..10-get-1..10-free

2 个答案:

答案 0 :(得分:1)

如果n始终固定为1到10,请删除括号。 [1..10]是一个Range数组,1..10Range

1..10.each do |x|
  1..10.each do |y|
    get "/buy-#{x}-get-#{y}" => "store#xyz"
  end
end

Range documentation.

答案 1 :(得分:0)

你做的方式不是标准方式。

你为什么不这样做: -

get "/buy/:m/get/:n" => "store#xyz", as: :buy_get

通过这种方式,您可以将此URL用于m和n的不同值 例如: -

buy_get_path(m: 1, n: 2) #this will generate url like - /buy/:1/get/:2
buy_get_path(m: 3, n: 4) #this will generate url like - /buy/:3/get/:4

根据您的要求: -

get 'buy-:m-get-:n', to: 'articles#buy_get', as: :buy_get

您可以将其用作: -

buy_get_path(m: 1, n: 2) # this will generate url like: - buy-1-get-2