Rails中自定义嵌套路由的简单URL帮助程序

时间:2013-07-17 01:28:01

标签: ruby-on-rails ruby

我有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保持不变,我很乐意自己更改路线。

1 个答案:

答案 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