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

问题描述 投票:0回答:2

我在一个控制器中有一个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
ruby-on-rails routes
2个回答
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.


0
投票

你的方式不是标准方式。

为什么你不这样做: -

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

通过这种方式,您可以将此网址用于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

as per your requirement: -

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
© www.soinside.com 2019 - 2024. All rights reserved.