如何覆盖rails路由助手方法?

时间:2012-07-20 18:53:07

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

有没有办法覆盖rails路由助手方法,以便它们以不同方式处理模型实例?我刚刚创建了一个不从User继承的ActiveRecord::Base模型,而是使用我编写的方法从LDAP数据库中检索用户。但是,现在所有的路径助手方法都搞砸了。 (例如,user_path(user)提供/users/#<User:0x3df82a0>而不是/users/002131

我尝试使用以下代码覆盖该方法(放在User模型中),但它似乎没有做任何事情。有什么想法吗?

class << Rails.application.routes.url_helpers
  def user_path(user)
    if user.class == User
      users_path + "/#{user.id}"
    else
      users_path + "/#{user}"
    end
  end
end

1 个答案:

答案 0 :(得分:4)

在您的模型上实现to_param方法,当您将其传递给路径助手时,它应该调用该方法。

一个例子:大多数时候您按照模型ID路由,所以像

这样的调用
user_path(some_user)

生成类似/users/45

的网址

但是我们假设你有一个你想在路线中使用的唯一用户名,所以你只会这样做:

class User
  def to_param
    username
  end
end

然后拨打user_path(user)会产生类似:/users/blackbear

的内容