2

有没有办法覆盖 rails route helper 方法,以便它们以不同的方式处理模型实例?我刚刚创建了一个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
4

1 回答 1

4

在你的模型上实现一个to_param方法,当你将它传递给一个路由助手时,它应该调用那个方法。

一个例子:大多数时候你通过模型 ID 进行路由,所以像这样的调用

user_path(some_user)

生成一个类似的 URL/users/45

但是假设您有一个要在路由中使用的唯一用户名,所以您只需执行以下操作:

class User
  def to_param
    username
  end
end

然后调用user_path(user)会产生类似的东西:/users/blackbear

于 2012-07-20T18:58:29.263 回答