Ruby on rails 如何覆盖rails路由帮助器方法?

Ruby on rails 如何覆盖rails路由帮助器方法?,ruby-on-rails,ruby-on-rails-3,ruby-on-rails-3.2,Ruby On Rails,Ruby On Rails 3,Ruby On Rails 3.2,有没有一种方法可以覆盖rails route helper方法,以便它们以不同的方式处理模型实例?我刚刚创建了一个User模型,该模型不是从ActiveRecord::Base继承的,而是使用我编写的方法从LDAP数据库检索用户。但是,现在所有的route helper方法都混乱了。(例如,user\u path(user)给出的是/users/\code>而不是/users/002131) 我尝试用以下代码覆盖该方法(放在用户模型中),但它似乎没有做任何事情。有什么想法吗 class <

有没有一种方法可以覆盖rails route helper方法,以便它们以不同的方式处理模型实例?我刚刚创建了一个
User
模型,该模型不是从
ActiveRecord::Base
继承的,而是使用我编写的方法从LDAP数据库检索用户。但是,现在所有的route helper方法都混乱了。(例如,
user\u path(user)
给出的是
/users/\code>而不是
/users/002131

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

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

class在您的模型上实现一个
to_param
方法,当您将该方法传递给route helper时,它应该调用该方法

例如:大多数情况下,您是通过模型ID进行路由的,因此

user_path(some_user)
生成类似于
/users/45

但假设您有一个唯一的用户名,您希望在路由中使用该用户名,那么您只需执行以下操作:

class User
  def to_param
    username
  end
end

然后,对
user\u path(user)
的调用将生成如下内容:
/users/blackbear

在模型上实现
to\u param
方法,当您将该方法传递给route helper时,它应该调用该方法

例如:大多数情况下,您是通过模型ID进行路由的,因此

user_path(some_user)
生成类似于
/users/45

但假设您有一个唯一的用户名,您希望在路由中使用该用户名,那么您只需执行以下操作:

class User
  def to_param
    username
  end
end

然后对
user\u path(user)
的调用将生成如下内容:
/users/blackbear

完美!我希望有一种方法可以做到这一点。谢谢你的帮助。你知道有没有类似的方法可以使用link_to helper方法?这些似乎不受to_param的影响。当然,我可以将它们设置为指向
user\u path(user)
,而不仅仅是
user
,但如果有一种简单的方法可以让link\u正常工作,那就太好了。太好了!我希望有一种方法可以做到这一点。谢谢你的帮助。你知道有没有类似的方法可以使用link_to helper方法?这些似乎不受to_param的影响。当然,我可以将它们设置为指向
user\u path(user)
,而不仅仅是
user
,但如果有一种简单的方法可以让link\u正常工作,那就太好了。