我正在使用站点棱镜来创建一个可能有 2 个 url 的页面对象。Site_prism 使用 Addressable::Template,它使用 URI 模板 RFC 6570。
所需的页面包含一个元素列表,但也可以没有,并且根据这个逻辑定义了 2 个可能的 URL。
如果页面没有元素,则 URL 为example.com/foo
如果页面有元素,它将选择第一个重定向到example.com/foo/1/bar
我正在尝试为页面创建一个 url 模板,以便我可以有两个可能的输出之一。
案例 1:Page.new.load
=>example.com/foo
案例 2:Page.new.load(id: 1)
=>example.com/foo/1/bar
到目前为止我得到的解决方案是:
set_url '/foo{/id,path}'
Page.new.load(id: 1, path: 'bar')
这适用于案例 1,但不适用于案例 2,因为它需要 2 个变量。
set_url '/foo{/path*}'
Page.new.load(path: [1, 'path'])
这同样适用于案例 1,但不适用于案例 2。
我需要的是一个 uri 模板,它附加了一个路径,但前提是变量存在。就像是:/foo{/id,path("bar")}
具有默认值的变量,或仅与已定义变量一起存在的路径。
提前致谢。