在使用STI时,如何强制Rails在link_to助手中使用超类名?

时间:2012-08-07 15:21:22

标签: ruby-on-rails ruby routes single-table-inheritance

我正在使用带有Rails 3.2应用程序的STI。我想强制Rails在link_to帮助器中使用超类名称(或者在生成路径的任何其他位置)而不是子类名称。

因此,<%= link_to current_user.name, current_user %>生成/:class_name/:id(类名称可以是“主持人”,“会员”等等。)

我希望它生成/users/:id,其中users不会更改为子类的名称。我知道我可以将current_user更改为user_path(current_user),但我更喜欢使用快捷方式,让Rails弄明白。

这可能吗?

3 个答案:

答案 0 :(得分:2)

我认为你应该定义url helpers,类似这样的

def moderator_url record
  user_url record
end

或者只使用别名

alias :moderator_url :user_url

当您将记录作为选项传递时,这是用于生成URL的代码

https://github.com/rails/rails/blob/537ede912895d421b24acfcbc86daf08f8f22157/actionpack/lib/action_dispatch/routing/polymorphic_routes.rb#L90

答案 1 :(得分:0)

对于链接,我可以通过添加资源来解决这个问题:

resources :owners, path: 'users', controller: 'users'

对于表单,我需要指定通用表单。我最初的表格是

= simple_form_for @user do |f|

为了使这项工作,我必须指定路径和方法,同时使用通用名称而不是直接将用户对象传递给表单:

= simple_form_for :user, url: user_path(@user) do |f|

答案 2 :(得分:0)

使用指定路线:

<%= link_to current_user.name, user_path(current_user) %>