Rails路由重定向与绑定参数

时间:2017-04-05 19:55:49

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

在我的路线中我正在做:

get 'category/products/:product_hash(/:ref)',
  to: redirect('/new_path/products/%{product_hash}%{ref}', status: 301)

get 'new_path/products/:product_hash(/:ref)',
  to: 'products#new', as: :new_product, defaults: {ref: 'print'}

它不能与%{ref}一起使用,它会返回:

“找不到密钥{ref}”

如何在重定向中创建“ ref ”可选参数?

感谢。

1 个答案:

答案 0 :(得分:0)

您还希望为重定向路由提供ref的默认值。请注意,如果您希望默认值为空,则空字符串是有效值。

您可能还想将/移到括号外 - 可以使用尾部斜杠,移动它将有助于确保您的默认值正确传递(即,否则您需要附加/,并且可能存在最终出现双斜杠的情况。所以你最终会得到类似的东西:

get 'category/products/:product_hash/(:ref)',
  to: redirect('/new_path/products/%{product_hash}/%{ref}', status: 301), defaults: {ref: ''}

get 'new_path/products/:product_hash/(:ref)',
  to: 'products#new', as: :new_product, defaults: {ref: 'print'}