Я использую 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 предоставляет способ сделать это, не возвращаясь к ручному коду.