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
-
#add_virtual_buz_attributes!(db_buz_attrs = {}) ⇒ Object
将对象转成json数据时,允许添加额外的属性字段,但并不存入数据库.
-
#as_json(options = {}) ⇒ Object
在将model转成json数据时会自动调用该方法.
-
#buz_value(buz_attr = nil) ⇒ Object
获取对象的某个属性的业务值.
- #erp_admin?(params = {}) ⇒ Boolean
- #update_from_buz(params = {}) ⇒ Object
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(={}) #获取数据库属性数据 #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
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 |