Виртуальные атрибуты с Devise в Rails 4
Моя модель пользователя не имеет :name
поле, но я хочу включить :name
поле в форме регистрации, которая будет использоваться для создания записи другой модели в after_create
,
class User < ActiveRecord::Base
after_create :create_thing
private
def create_thing
@thing = Thing.new
@thing.name = <here's where I need help>
@thing.save!
end
end
Как я могу получить имя из формы регистрации?
2 ответа
Решение
В вашей модели добавьте attr_accessor для имени
attr_accessor :name
Это позволит вам добавить его в форму и использовать его для генерации правильных данных в вашем after_create
Точно так же, как @trh сказал, что вы можете использовать attr_accessor, но если вам нужно, чтобы он выполнял некоторую логику, вам нужно создать методы getter и / или setter для сопровождения attr_accessor.
class User < ActiveRecord::Base
attr_accessor :name
after_create :create_thing
def name
#if need be do something to get the name
"#{self.first_name} #{self.last_name}"
end
def name=(value)
#if need be do something to set the name
names = value.split
@first_name = names[0]
@last_name = names[1]
end
private
def create_thing
@thing = Thing.new
@thing.name = self.name
@thing.save!
end
end