我使用以下内容来渲染集合:
<%= 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 %>
其中r
是Release
的模型且有一个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
参数?
答案 0 :(得分:3)
显然rails不喜欢参数名:domain
。我将其重命名为:domain_id
,一切正常。
答案 1 :(得分:0)
这实际上应该与您计算域名的方式相关联
您可以检查(通过在页面上打印或使用调试器)r.site.domain返回正确的域吗?
这可能与路线无关。
修改
如果r.site.domain在partial中返回你想要的内容,那么它是否与域param上的约束有关。 r.site.domain返回的字符串是否通过了约束?