Rails разработал делегатский набор и сохрани обе модели - PullRequest
0 голосов
/ 10 февраля 2012

Я использую рельсы 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.Спасибо!

1 Ответ

0 голосов
/ 10 февраля 2012

Попробуйте:

u = User.new #=> new user object
u.build_profile
u.name #=> nil
u.name = 'something' #=> "something" 
u.name #=> ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...