用 match 方法匹配动态数据
Match dynamic data with match method
我正在尝试借助 match 方法来匹配动态路由,但它不起作用。
["payment", "portal", "animation"].each do |arg|
define_method("profile_#{arg}") do
self.path.match("/users/\d+/#{arg}")
end
end
因此,此代码 self.path.match("/users/\d+/#{arg}") 不适用于插值。
而如果我像下面那样做,它就会起作用。那么,有没有办法动态匹配数据呢
self.path.match('/users/\d+/payment')
self.path.match('/users/\d+/portal')
self.path.match('/users/\d+/animation')
\d+ 表达式不能正确处理双引号和字符串插值。这里有一个“门户”的示例路径和 2 种匹配它的方法。 (使用 2.5.5 测试)
path = "somedir/users/#{rand(0..999)}/portal"
["payment", "portal", "animation"].each do |arg|
define_method("profile_#{arg}") do
path.match("/users/"+(/\d+/).to_s+"/#{arg}")
# or
path.match('users/\d+/'+arg)
end
end
puts profile_payment
puts profile_portal
puts profile_animation
您可以在正则表达式本身内进行插值。
?> s = "payment"
=> "payment"
>> %r(/users/\d+/#{s})
=> /\/users\/\d+\/payment/
我正在尝试借助 match 方法来匹配动态路由,但它不起作用。
["payment", "portal", "animation"].each do |arg|
define_method("profile_#{arg}") do
self.path.match("/users/\d+/#{arg}")
end
end
因此,此代码 self.path.match("/users/\d+/#{arg}") 不适用于插值。
而如果我像下面那样做,它就会起作用。那么,有没有办法动态匹配数据呢
self.path.match('/users/\d+/payment')
self.path.match('/users/\d+/portal')
self.path.match('/users/\d+/animation')
\d+ 表达式不能正确处理双引号和字符串插值。这里有一个“门户”的示例路径和 2 种匹配它的方法。 (使用 2.5.5 测试)
path = "somedir/users/#{rand(0..999)}/portal"
["payment", "portal", "animation"].each do |arg|
define_method("profile_#{arg}") do
path.match("/users/"+(/\d+/).to_s+"/#{arg}")
# or
path.match('users/\d+/'+arg)
end
end
puts profile_payment
puts profile_portal
puts profile_animation
您可以在正则表达式本身内进行插值。
?> s = "payment"
=> "payment"
>> %r(/users/\d+/#{s})
=> /\/users\/\d+\/payment/