Виртуальные атрибуты с 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
Другие вопросы по тегам