【发布时间】:2017-04-03 13:28:12
【问题描述】:
有谁知道它是如何工作的,最重要的是如何覆盖它?
我从事 Rails 5.0.0.1 项目。出于实际原因,我们使用命名空间路由,例如
namespace :survey do
resources :questions
resources :answers
end
我们有相应的Question 和Answer 模型。
documentation 告诉我们,帮助器 link_to 可以通过简单地将 ActiveRecord 实例作为第二个参数传递来使用,这意味着在我的情况下,只需在视图 (haml) 中编写以下内容:
= link_to 'Show question', @question
如果没有命名空间,这可以正常工作,但适用于命名辅助方法 question_path,即使路由是命名空间的 - 而不是 survey_question_path。关键是我想从一个名为 route helper 的 ActiveRecord 实例中决定使用。
有趣的是,Rails 知道 Question 实例将有一个命名路由,如 question_path,我就是不知道怎么做。
到目前为止我发现了什么:
-
link_to的第二个参数使用辅助方法url_for,然后选择适当(或不)命名的路由辅助方法 - 但如何? - ActiveRecord 实例具有
model_name方法,其中包含route_key(复数)和singular_route_key等属性 - 我不确定这是否与我正在寻找的内容有关,或者即使它有如何覆盖它。
我认为有一个简单的方法可以在模型中覆盖,例如 to_partial_path 用于 render @question 或 self.controller_path 在控制器从另一个视图目录呈现操作的情况下,但我找不到它。
任何帮助将不胜感激。
编辑
经过一番谷歌搜索后,我偶然发现了APIdock 中的以下段落(依赖命名路线):
传递一条记录(如
Active Record)而不是哈希作为选项参数将触发该记录的命名路由。查找将发生在类的名称上。因此,传递一个 Workshop 对象将尝试使用workshop_path路由。如果您有嵌套路由,例如admin_workshop_path,则必须显式调用它(url_for无法猜测该路由)。
【问题讨论】:
标签: ruby-on-rails activerecord routes overriding