Обеспечение связи has_one - PullRequest
0 голосов
/ 01 июля 2011

Я использую devise, но модель User связана с устаревшей таблицей, и поэтому она отлично работает.

Теперь я хочу реализовать возможность сброса паролей, и это требует наличия новых полей (reset_password_token и reset_password_token_at), которые я не могу создать на исходной таблице.

Я решил использовать старый добрый delegate с отношением has_one.Вот что я сделал:

class User < LegacyDatabase
  set_table_name 'T_CLIENTS'

  devise :database_authenticatable, :authentication_keys => [:email]
  devise :recoverable

  has_one :user_setting

  delegate :reset_password_token,   :to => :user_setting
  delegate :reset_password_sent_at, :to => :user_setting

  # (...)
end

Теперь моя проблема заключается в том, что мне нужно обеспечить, чтобы все пользователи создавали пользовательские настройки, когда мне нужно было получить доступ к новым полям.

Если я делалэто вручную, я мог бы сделать UserSetting.find_or_create_by_user_id (...), но прежде чем идти по этому пути, я хотел бы знать, если rails предоставляет способ сделать это, не возвращаясь к ручному коду.

1 Ответ

0 голосов
/ 01 июля 2011

Хорошо, насколько уродлив этот подход (кажется, работает):

alias :old_user_setting :user_setting

def user_setting
  old_user_setting || create_user_setting
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...