2013-10-08 5 views
1

У меня есть модель пользователя с :email и :user_name, я хочу, чтобы авто инициализировать :user_name с частью :email.Как инициализировать поле на основе другого поля?

class User 
    include Mongoid::Document 
    field :email 
    field :user_name 
end 

Я использую simple_form для создания пользователя. Как я могу инициализировать :user_name на основе :email?

+0

Пожалуйста, ответьте на вопрос, вместо редактирования ... –

+0

вы можете дать несколько примеров, также? –

+0

ответил ли какой-либо ответ на ваш вопрос или вам нужна дополнительная информация? –

ответ

2

В вашей модели: -

before_create :add_user_name 

private 
    def add_user_name 
    self.user_name = self.email 
    end 
1

Использование по умолчанию:

class User 
include Mongoid::Document 
field :email, type: String 
field :user_name, default: ->{ "email_is: #{email}" } 
end 

«Если вы хотите установить по умолчанию с зависимостью от состояния документа, я внутри лямбда или proc оценивает документ экземпляр ".

См: Mongoid fields documentation

Испытано с рельсов C:

u = User.new email: "[email protected]" 
u.user_name # => "email_is: [email protected]" 
+0

Ваш код должен использовать 'self.email' вместо' email'. –

+0

Не нужно использовать себя. self.email или электронная почта сделают эту работу. Кроме того, это будет работать даже с пользователями, созданными в базе данных до того, как будет реализовано имя пользователя по умолчанию. –

+0

Он выдает ошибку, если не используется 'self.email', когда пользователь создает консоль rails. –

Смежные вопросы