Я использую рельсы 3.2.1 и последние разработки.Этот драгоценный камень дает нам много столбцов в модели User
, таких как:
current_sign_in_at, remember_created_at, last_sign_in_at
и т. Д.
Поэтому я решил сохранить свою модель в чистоте и переместить все поля, кроме id,email,password,timestamps
вТаблица под названием user_sessions
(модель UserSession
), в поисках того, как решить эту проблему, я нашел метод делегатов, но не понимаю, как реализовать этот функционал.Если у вас есть другие идеи, пожалуйста, объясните их полностью.
Впервые я попробовал простой пример в тестовом приложении.Я создаю 2 модели: User
(электронная почта: строка) и Profile
(user_id: целое число, имя: строка).Вот они:
class User < ActiveRecord::Base
has_one :profile
delegate :name, :name=, :to => :profile, :allow_nil => true
end
class Profile < ActiveRecord::Base
belongs_to :user
end
Я открыл рельсы c и попытался:
u = User.new #=> new user object
u.name #=> nil
u.name = 'something' #=> "something"
u.name #=> nil
, поэтому я не могу даже установить значение, потому что после этого оно все равно ноль для некоторыхпричина.Я ожидаю изменить значение и сохранить этот объект.Также я понимаю, что это сохранит только User
, а не Profile
, поэтому я думаю о реализации before_save
, где я обработаю необходимое значение и сохраню Profile
объект, например:
before_save :save_profile
def save_profile
#get self.name and somehow save profile object
end
и то же самое для функции обновления.Может ли это быть реализовано?Или предложите лучший способ, пожалуйста.И еще раз обратите внимание, что я хочу реализовать это в модели Devise
User.Спасибо!