module Ns::ControllerServicable

Public Instance Methods

create() click to toggle source

创建记录

# File lib/ns_service_pack/controller_servicable.rb, line 37
def create
  @_obj = model_class.new_from_buz(params[:data]) 
  if @_obj.save
    render :json=>ResultPacker.data(@_obj, "创建#{model_class.name}##{@_obj.respond_to?(:id) ? @_obj.id : @_obj.object_id}成功!")
  else
    render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
  end
end
destroy() click to toggle source

更新记录 # 在获取时要做过滤判断!! TODO

# File lib/ns_service_pack/controller_servicable.rb, line 57
def destroy
  @_obj = model_class.find(params[:id])
  if model_class.mapping.keys.include?(:status) && !params.key?(:force_del)
    if @_obj.update_from_buz(:status=>'作废')
      render :json=>ResultPacker.data(@_obj, "该记录已被逻辑删除(状态标记为:作废!)")
    else
      render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
    end
  else
    @_obj.destroy
    render :json=>ResultPacker.data(@_obj, "警告:资源(#{model_class.name}##{@_obj.respond_to?(:id) ? @_obj.id : @_obj.object_id})已被物理删除!此资源不具备逻辑删除条件具有status业务属性或被内部强制删除!")
  end
end
get_page_data(start = 0, size = 10, params = {}) click to toggle source

return [total_count, page_data] 可在子类中覆盖定制

# File lib/ns_service_pack/controller_servicable.rb, line 13
def get_page_data(start = 0, size = 10, params = {})
  where_conds = @conds.present? ? @conds : model_class.arrayify_conds(params)
  logger.debug "====>conds: #{where_conds.inspect}"
  conds = {:conditions=>where_conds}
  total_count = model_class.count(conds)
  page_params = conds.merge!(:select=>model_class.select_fields(params[:select]), 
                             :offset=>start, :limit=>size, :order=>params[:order])
  page_data = model_class.all(page_params)
  [total_count, page_data]
end
index() click to toggle source
# File lib/ns_service_pack/controller_servicable.rb, line 4
def index
  @result = model_class.paginate(params) do |start, page_size|
    get_page_data(start, page_size, params)
  end
  render :json=>ResultPacker.data(@result.as_json)
end
new() click to toggle source

get a new buz obj with db default value

# File lib/ns_service_pack/controller_servicable.rb, line 25
def new
  @_data = model_class.buz_hashize
  render :json=>ResultPacker.data(model_class.name.underscore.to_sym=>@_data)
end
show() click to toggle source

查找单条记录

# File lib/ns_service_pack/controller_servicable.rb, line 31
def show
  @_obj = model_class._find_resource(params)
  render :json=>ResultPacker.data(@_obj, "获取#{model_class.name}##{@_obj.respond_to?(:id) ? @_obj.id : @_obj.object_id}成功!")
end
update() click to toggle source

更新记录

# File lib/ns_service_pack/controller_servicable.rb, line 47
def update
  @_obj = model_class.find(params[:id])
  if @_obj.update_from_buz(params[:data])
    render :json=>ResultPacker.data(@_obj, "更新#{model_class.name}##{@_obj.respond_to?(:id) ? @_obj.id : @_obj.object_id}成功!")
  else
    render :json=>ResultPacker.help(valid_errors(model_class.buz_hashize(@_obj.errors.to_hash)))
  end
end

Protected Instance Methods

valid_errors(error_hash = {}) click to toggle source

验证错误回传

# File lib/ns_service_pack/controller_servicable.rb, line 73
def valid_errors(error_hash = {})
  (error_hash||{}).each{|k, v| error_hash[k] = v.join(', ') if v.is_a? Array }
end