0

在我的 Rails 3 应用程序中,我有一个名为 User 的模型,它具有 id 和 username,两者都是索引且唯一的。在某些观点中,我有以下几点:

<%= link_to 'Show this user', user %>

这会创建一个这样的链接:

<a href="/users/980190962">Show this user</a>

那个可怕的数字是 id(主键)。现在,为了站点的 SEFness,我想在我使用 link_to "...", user 的任何地方使用用户名而不是 id,但仅适用于该用户模型。向 link_to 添加参数并没有帮助,因为我已经在很多地方拥有它(而且我不想一直在任何地方添加另一个参数)。

如何仅针对一个模型覆盖 link_to 助手的行为?


这是我从接受的答案中扣除的这个问题的完整答案。我在我的用户模型中添加了以下内容:

def to_param  # overridden to use username as id, and not the id. More SEF.
  username
end
def self.find(id)
  @user = User.find_by_id(id)
  @user = User.find_by_username(id) if @user == nil
  throw ActiveRecord.RecordNotFound.new if @user == nil
  @user
end

现在,这使得使用 link_to 生成的所有链接都使用用户名,而 find 将同时尝试 id 和用户名,使其也向后兼容。

以为像我这样刚接触 Rails 的人会发现这很有用。

4

1 回答 1

2

不确定我在说什么,但#to_param在您的模型中覆盖可能是您正在寻找的。

于 2012-01-13T15:38:47.990 回答