Module: Ns::FieldMapping

Defined in:
lib/ns_service_pack/field_mapping.rb

Defined Under Namespace

Modules: ClassMethods

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



11
12
13
# File 'lib/ns_service_pack/field_mapping.rb', line 11

def self.included(base)
  base.extend(ClassMethods)
end

Instance Method Details

#add_virtual_buz_attributes!(db_buz_attrs = {}) ⇒ Object

将对象转成json数据时,允许添加额外的属性字段,但并不存入数据库



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 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 = {}) ⇒ Object

在将model转成json数据时会自动调用该方法



16
17
18
19
20
21
22
# 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) ⇒ Object

获取对象的某个属性的业务值



45
46
47
48
49
50
51
52
53
54
55
56
# 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 = {}) ⇒ Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/ns_service_pack/field_mapping.rb', line 58

def erp_admin?(params = {})
  self.class.erp_admin?(params)
end

#update_from_buz(params = {}) ⇒ Object



40
41
42
# File 'lib/ns_service_pack/field_mapping.rb', line 40

def update_from_buz(params={})
  update_attributes(self.class.db_hashize(params))
end