提问人:kael 提问时间:5/1/2013 更新时间:6/1/2013 访问量:175
如何获得批量分配以利用自定义分配方法
How to get mass assignment to utilize custom assignment methods
问:
这让我完全发疯了。我有一个自定义 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
但是当我执行像这样的批量赋值时,属性会直接设置,绕过我的自定义 setter 方法,然后验证失败,因为它不是原始形式。person.update_attributes( :phone => '(888) 123.4567' )
有什么想法吗?
答:
0赞
kael
6/1/2013
#1
不幸的是,这似乎没有太多的解决方案。我最终放弃了它,只是将代码复制到before_save过滤器中。看起来很令人发指,但这就是生活......
评论