mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 03:40:49 +08:00
init project
This commit is contained in:
25
app/controllers/concerns/base/error_rescue_handler.rb
Normal file
25
app/controllers/concerns/base/error_rescue_handler.rb
Normal file
@@ -0,0 +1,25 @@
|
||||
module Base::ErrorRescueHandler
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
included do
|
||||
rescue_from Exception do |e|
|
||||
raise e if Rails.env.development?
|
||||
|
||||
Util.logger_error e
|
||||
internal_server_error
|
||||
end
|
||||
|
||||
rescue_from ActionView::MissingTemplate, ActiveRecord::RecordNotFound, with: :render_not_found
|
||||
rescue_from ActionController::ParameterMissing do
|
||||
render_unprocessable_entity('参数缺失')
|
||||
end
|
||||
# form validation error
|
||||
rescue_from ActiveModel::ValidationError do |ex|
|
||||
render_unprocessable_entity(ex.model.errors.full_messages.join(','))
|
||||
end
|
||||
rescue_from ActiveRecord::RecordInvalid do |ex|
|
||||
ex.backtrace.each { |msg| Rails.logger.error(msg) }
|
||||
render_unprocessable_entity(ex.record.errors.full_messages.join(','))
|
||||
end
|
||||
end
|
||||
end
|
||||
29
app/controllers/concerns/base/paginate_helper.rb
Normal file
29
app/controllers/concerns/base/paginate_helper.rb
Normal file
@@ -0,0 +1,29 @@
|
||||
module Base::PaginateHelper
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def default_sort(sort_by, direction)
|
||||
params[:sort_by] = params[:sort_by].presence || sort_by
|
||||
params[:sort_direction] = params[:sort_direction].presence || direction
|
||||
end
|
||||
|
||||
def offset
|
||||
(page - 1) * per_page
|
||||
end
|
||||
|
||||
def page
|
||||
params[:page].to_i <= 0 ? 1 : params[:page].to_i
|
||||
end
|
||||
|
||||
def per_page
|
||||
params[:per_page].to_i <= 0 || params[:per_page].to_i > 100 ? 20 : params[:per_page].to_i
|
||||
end
|
||||
alias_method :limit, :per_page
|
||||
|
||||
def paginate(relations, total_count: nil)
|
||||
if relations.is_a?(Array)
|
||||
Kaminari.paginate_array(relations, limit: limit, offset: offset, total_count: total_count)
|
||||
else
|
||||
relations.page(page).per(per_page)
|
||||
end
|
||||
end
|
||||
end
|
||||
38
app/controllers/concerns/base/render_helper.rb
Normal file
38
app/controllers/concerns/base/render_helper.rb
Normal file
@@ -0,0 +1,38 @@
|
||||
module Base::RenderHelper
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
def render_by_format(hash)
|
||||
format = request.format.symbol
|
||||
hash.key?(format) ? hash[format].call : hash[:html].call
|
||||
end
|
||||
|
||||
def render_forbidden
|
||||
render_by_format(html: -> { current_user&.business? ? render('shared/403') : redirect_to('/403') },
|
||||
js: -> { render_js_error(I18n.t('error.forbidden'), type: :notify) },
|
||||
json: -> { render status: 403, json: { messages: I18n.t('error.forbidden') } } )
|
||||
end
|
||||
|
||||
def render_not_found
|
||||
render_by_format(html: -> { render 'shared/404' },
|
||||
js: -> { render_js_error('资源未找到') },
|
||||
json: -> { render status: 404, json: { message: '资源未找到' } })
|
||||
end
|
||||
|
||||
def render_unprocessable_entity(message, type: :alert)
|
||||
render_by_format(html: -> { render 'shared/422' },
|
||||
js: -> { render_js_error(message, type: type) },
|
||||
json: -> { render status: 422, json: { message: message } })
|
||||
end
|
||||
alias_method :render_error, :render_unprocessable_entity
|
||||
|
||||
def internal_server_error(message = '系统错误')
|
||||
@message = message
|
||||
render_by_format(html: -> { render 'shared/500' },
|
||||
js: -> { render_js_error(message) },
|
||||
json: -> { render status: 500, json: { message: message } })
|
||||
end
|
||||
|
||||
def render_js_template(template, **opts)
|
||||
render({ template: template, formats: :js }.merge(opts))
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user