我的应用程序中有一个电话型号用于建立如下电话号码:
t.column :number, :string
t.references :phoneable, :polymorphic => true
我想将数字限制为格式317.555.5555x234,所以我创建的表格有四个方框(区号,3位,4位,分机):
- form_for @user do |user_form|
-user_form.fields_for :phones do |phone|
= phone.text_field :area_code
= phone.text_field :first_three_digits
etc...
我假设一个虚拟属性将是要去的路线(一个轨道广播ep16),但不知道如何从4个单独的text_fields中组装“数字”。
我想我必须做这样的事情:
def full_number=(phone)
self.number = area_code+"."+first_three_digits+"."+second_four_digits+"."+extension
end
但我不确定如何从表格输入中汇总数字。有什么想法吗?
答案 0 :(得分:2)
我通常将此作为before_save:
before_save :update_phone_number
def update_phone_number
self.phone_number = [area_code, first_three_digits, second_four_digits, extension].reject(&:blank?).join('.')
end
首先,我会有一些验证:
validates_presence_of :area_code, :first_three_digits, :second_four_digits
validates_format_of :area_code, :with => /\d{3}/
validates_format_of :first_three_digits, :with => /\d{3}/
validates_format_of :second_four_digits, :with => /\d{4}/
validates_format_of :extension, :with => /\d{0,6}/, :allow_blank => true
这只是为了确保您在电话号码中获得有效数据,而您之前的保存不会产生任何错误。我还假设您允许扩展名为空白,但很容易更改。
编辑:您需要为电话号码的不同部分设置attr_accessors:
attr_accessor :area_code, :first_three_digits, :second_four_digits, :extension