我有my application的以下路线:
TravisLite::Application.routes.draw do
resources :repositories, path: ':owner_name', only: %i[index show], param: :name, constraints: OwnerNameContraint do
resources :builds, only: %i[index show]
resources :jobs, only: %i[show]
end
end
这允许我拥有/travis-ci/travis-ci/builds/12345
等网址。路线本身效果很好,但我在生成页面的路径和URL时遇到了一些麻烦。
现在,为了链接到构建,我必须这样做:
repositories_build_path(owner_name: repository.owner_name, repository_name: repository.name, id: build.id)
我想做的事情更像是这样:
repositories_build_path([repository, build])
有没有办法做到这一点,或者至少简化URL帮助程序调用,而不更改我的URL方案?只要URL保持不变,我很乐意自己更改路线。
答案 0 :(得分:0)
为了记录,这就是我目前的做法,也可能是最好的方式:
我安装了draper,所以我的BuildDecorator
看起来像这样:
class BuildDecorator < Draper::Decorator
def path
h.repository_build_path(
owner_name: object.repository.owner_name,
repository_nane: object.repository.name,
id: object.id,
)
end
end
我对其他路径有类似的方法。这允许我在视图中执行以下操作:
link_to build.number, build.path