Rails:路由忽略参数

时间:2013-08-24 11:05:35

标签: ruby-on-rails routes

我使用以下内容来渲染集合:

<%= render :partial => 'mini_release', collection: group, as: :r %>

以下路线:

constraints(domain: /[a-zA-Z0-9-]+/i, page: /[0-9]+/, :format => 'html') do
    get ':domain', :to => 'sites#show', as: :site
    get ':domain/releases(/p-:page)', :to => 'sites#releases', as: :site_releases, :constraints => { :format => /(json|html)/ }
    get ':domain/release/:release_id', :to => 'sites#release', as: :site_release
end

到目前为止一切顺利,路由工作和渲染工作。但是,当在部分“mini_release”内部调用下面的路径时,它会构建一个不正确的URL:

<%= link_to site_release_path(:domain => r.site.domain, :release_id => r), :class => 'col-xs-6' do %>

其中rRelease的模型且有一个Site(具有属性domain)。

根据URL构建,生成的URL是正确的。但:domain部分始终不正确,并且是当前的模型对象。

例如,假设我当前所在的网页是/site-one/release/my-release/,我正在渲染部分内容,所有部分内容都会生成/site-one/release/the-correct-slugs,而它们应该是/some-other-site/release/the-correct-slugs。我尝试了多种格式的路由 - 有和没有变量关联 - 但没有工作。似乎路由采用当前路由:domain参数而不是给定参数。

如何确保路线停止查看当前的:domain参数?

这可能与此https://github.com/rails/rails/issues/9829

有关

2 个答案:

答案 0 :(得分:3)

显然rails不喜欢参数名:domain。我将其重命名为:domain_id,一切正常。

答案 1 :(得分:0)

这实际上应该与您计算域名的方式相关联

您可以检查(通过在页面上打印或使用调试器)r.site.domain返回正确的域吗?

这可能与路线无关。

修改

如果r.site.domain在partial中返回你想要的内容,那么它是否与域param上的约束有关。 r.site.domain返回的字符串是否通过了约束?