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