2

我将 STI 与 Rails 3.2 应用程序一起使用。我想强制 Rails 在link_to帮助程序(或生成路径时的任何其他地方)中使用超类名称,而不是子类名称。

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

我希望它产生/users/:id, whereusers不会更改为子类的名称。我知道我可以更改current_useruser_path(current_user),但我更喜欢使用快捷方式,让 Rails 自己解决。

这可能吗?

4

3 回答 3

2

我认为你应该定义 url 助手,像这样

def moderator_url record
  user_url record
end

或者只使用别名

alias :moderator_url :user_url

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

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

于 2012-08-07T17:40:34.167 回答
0

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

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

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

= simple_form_for @user do |f|

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

= simple_form_for :user, url: user_path(@user) do |f|
于 2012-08-07T19:35:17.237 回答
0

使用命名路由:

<%= link_to current_user.name, user_path(current_user) %>
于 2012-08-07T19:52:42.657 回答