module Ns::FieldMapping
Public Class Methods
included(base)
click to toggle source
# File lib/ns_service_pack/field_mapping.rb, line 11 def self.included(base) base.extend(ClassMethods) end
Public Instance Methods
add_virtual_buz_attributes!(db_buz_attrs = {})
click to toggle source
将对象转成json数据时,允许添加额外的属性字段,但并不存入数据库
# File lib/ns_service_pack/field_mapping.rb, line 25 def add_virtual_buz_attributes!(db_buz_attrs = {}) the_mapping = self.class.mapping #获取非数据库属性,称为业务虚拟属性 delta_attrs = the_mapping.keys - db_buz_attrs.keys delta_attrs.each do |key| method_name = the_mapping[key] db_buz_attrs[key] = if self.respond_to?(method_name) self.send(method_name) else self.class.get_map_value(key, nil)#给出默认实现 end end db_buz_attrs end
as_json(options={})
click to toggle source
在将model转成json数据时会自动调用该方法
# File lib/ns_service_pack/field_mapping.rb, line 16 def as_json(options={}) #获取数据库属性数据 #TODO 想到的一个改进点:数据库查的时候根据mapping来选字段,而非全查出来,影响效率,影响较大,先不改! default_attrs = self.class.buz_hashize(self.attributes) #支持自定义方法的传入 20111118 for gao add_virtual_buz_attributes!(default_attrs) end
buz_value(buz_attr = nil)
click to toggle source
获取对象的某个属性的业务值
# File lib/ns_service_pack/field_mapping.rb, line 45 def buz_value(buz_attr = nil) result = nil if buz_attr db_key = self.class.mapping[buz_attr.to_sym] if db_key db_value = send(db_key) #TODO BETTER result = self.class.buz_hashize(db_key=>db_value)[buz_attr.to_sym] end end result end
erp_admin?(params = {})
click to toggle source
# File lib/ns_service_pack/field_mapping.rb, line 58 def erp_admin?(params = {}) self.class.erp_admin?(params) end
update_from_buz(params={})
click to toggle source
# File lib/ns_service_pack/field_mapping.rb, line 40 def update_from_buz(params={}) update_attributes(self.class.db_hashize(params)) end