У меня есть форма с 3 виртуальными атрибутами (phoneAreaCode, phonePrefix и phoneSuffix), разделяющая номер телефона на сегменты, которые объединяются и сохраняются в базе данных как phoneNum.Как заполнить поля виртуальной формы нераспределенным атрибутом
Когда пользователь переходит к обновлению своего профиля, большинство полей заполняются, но виртуальных полей нет. Я попытался использовать то, что, как я думал, было геттером, чтобы заставить его работать, но я не могу понять, что мне не хватает. В этой заметке я использую вложенную форму с атрибутами адреса из второй модели, однако, когда эти атрибуты равны нулю, поля формы вообще не отображаются в представлении обновления. Есть ли способ сделать эти отображения, даже если они ноль? Атрибуты вложенной формы отображаются в представлении регистрации, и оба вида регистрации и обновления отображают одну и ту же форму из макета. Модель ниже.
class User < ActiveRecord::Base
attr_accessor :phoneAreaCode, :phonePrefix, :phoneSuffix
attr_accessible :MOS, :dateOfBirth, :ets_pcsDate, :firstName,
:lastName, :middleInitial, :phoneNum, :phoneAreaCode, :phonePrefix,
:phoneSuffix, :rank, :email, :password, :password_confirmation,
:address_attributes
has_secure_password
has_one :address, dependent: :destroy
accepts_nested_attributes_for :address
before_save { |user| user.email = email.downcase }
before_save :create_remember_token
before_save :create_phoneNum
validates :rank, presence: true
validates :firstName, presence: true, length: { maximum: 15 }
validates :lastName, presence: true, length: { maximum: 20 }
validates :middleInitial, presence: true, length: { maximum: 1 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email,presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :dateOfBirth, presence: true
VALID_MOS_REGEX = /\A\d{2}[a-zA-Z]\z/
validates :MOS, presence: true,
format: { with: VALID_MOS_REGEX }
validates :ets_pcsDate, presence: true
VALIDATE_AREA_PREFIX_REGEX = /\A\d{3}\z/
validates :phoneAreaCode, presence: true,
format: { with: VALIDATE_AREA_PREFIX_REGEX }
validates :phonePrefix, presence: true,
format: { with: VALIDATE_AREA_PREFIX_REGEX }
VALIDATE_SUFFIX_REGEX = /\A\d{4}\z/
validates :phoneSuffix, presence: true,
format: { with: VALIDATE_SUFFIX_REGEX }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true
private
def create_phoneNum
self.phoneNum = [phoneAreaCode,
phonePrefix, phoneSuffix].join(' ')
end
def create_phoneNum=(phoneNum)
split = phoneNum.split(' ', 3)
self.phoneAreaCode = split.first
self.phonePrefix = split.second
self.phoneSuffix = split.last
end
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
Где create_phoneNum = называется? – Magnuss
Его нет. Я предполагал, что это был тот кусок, в котором я нуждался, я просто не мог найти ничего, что объясняло, где назвать геттер, чтобы заполнить поля. Я не был уверен, что это было то, что было обработано в модели или контроллере. –