如何使用带有path的可选变量的URI模板

时间:2017-08-31 15:54:45

标签: ruby uri site-prism uritemplate addressable-gem

我正在使用网站棱镜来创建一个可能有2个网址的网页对象。 Site_prism使用Addressable :: Template,它使用URI模板RFC 6570。

所需页面包含元素列表,但也可以没有,并且从这个逻辑2中定义了可能的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")}

具有默认值的变量,或仅与定义的变量一起出现的路径。

提前致谢。

1 个答案:

答案 0 :(得分:0)

SitePrism已对可寻址模板进行了很多更新,但是所有这些都已发布之后,您要进行发布。

您是否尝试过使用site_prism和addressable的更高版本(site_prism在2.12之后,addressable在2.5之后)。

如果不能,请在Github上打开缺陷/功能请求,因为这听起来像是我们“应该”支持的事情。 https://github.com/natritmeyer/site_prism/issues