Rails и SEF URL: изменение ключа, используемого в link_to, для использования другого поля, чем первичный ключ - PullRequest
0 голосов
/ 13 января 2012

В моем приложении на Rails 3 у меня есть модель User с id и именем пользователя, оба индексируются и уникальны. Где-то в некоторых представлениях у меня следующее:

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

Это создает такую ​​ссылку:

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

где это ужасное число - идентификатор (первичный ключ). Теперь, для SEFness сайта, я хотел бы использовать имя пользователя вместо идентификатора везде, где я использую link_to "...", пользователя, но только для этой модели пользователя. Добавление параметров в 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_, будут использовать имя пользователя, в то время как при поиске будут использоваться и идентификатор, и имя пользователя, что делает его также обратно совместимым.

Думал, что кто-то новый для меня в Rails найдет это полезным.

1 Ответ

2 голосов
/ 13 января 2012

Не уверен в том, что я говорю, но переопределение #to_param в вашей модели может быть тем, что вы ищете.

...