2
這使我完全瘋狂。我有一個自定義的setter和一個電話號碼字段的自定義的getter:如何使用自定義分配方法獲得質量分配
class Person < ActiveRecord::Base
attr_accessible :phone
def phone=(p)
p = p.to_s.gsub(/\D+/, '')
p = p[1..-1] if p.length == 11 && p[0] == '1'
write_attribute(:phone, p)
end
def phone(format=:display)
case format
when :display then return pretty_display(attributes['phone'])
when :dialable then return dialable(attributes['phone'])
else return attributes['phone']
end
end
在case語句的方法都只是存根對我的實際執行,所以沒有必要讓這些掛斷了電話。當我直接使用對象時,這些get和set方法可以很好地工作。例如:
person = Person.find(1)
person.phone = '(888) 123.4567'`)
puts person.phone # => 888.123.4567
puts person.phone(:dialable) # => +18881234567
puts person.phone(:raw) # => 8881234567
但是,當我喜歡一個person.update_attributes(:phone => '(888) 123.4567')
質量分配,屬性被直接設置,繞過我的自定義setter方法,然後,因爲它不是以原始形式驗證失敗。
任何想法?