Module: DynamicScaffold::Controller
- Extended by:
- ActiveSupport::Concern
- Includes:
- ControllerUtilities
- Defined in:
- lib/dynamic_scaffold/controller.rb
Instance Method Summary collapse
- #create ⇒ Object
- #destroy ⇒ Object
- #edit ⇒ Object
-
#index ⇒ Object
Actions.
-
#new ⇒ Object
rubocop:disable Metrics/AbcSize.
- #sort ⇒ Object
- #update ⇒ Object
Instance Method Details
#create ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/dynamic_scaffold/controller.rb', line 65 def create @record = dynamic_scaffold.model.new @record.attributes = update_values bind_sorter_value(@record) if dynamic_scaffold.list.sorter dynamic_scaffold.model.transaction do check_max_count! yield(@record) if block_given? if @record.save redirect_to dynamic_scaffold_path(:index, request_queries) else render "#{params[:controller]}/new" end end end |
#destroy ⇒ Object
95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/dynamic_scaffold/controller.rb', line 95 def destroy # `Destroy` also does not support multiple primary keys too. record = find_record(dynamic_scaffold.model.primary_key => params['id']) begin dynamic_scaffold.model.transaction do record.destroy end rescue ::ActiveRecord::InvalidForeignKey => _error flash[:dynamic_scaffold_danger] = I18n.t('dynamic_scaffold.alert.destroy.invalid_foreign_key') rescue StandardError => error flash[:dynamic_scaffold_danger] = I18n.t('dynamic_scaffold.alert.destroy.failed') logger.error(error) end redirect_to dynamic_scaffold_path(:index, request_queries) end |
#edit ⇒ Object
61 62 63 |
# File 'lib/dynamic_scaffold/controller.rb', line 61 def edit @record = find_record(edit_params) end |
#index ⇒ Object
Actions
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/dynamic_scaffold/controller.rb', line 27 def index # rubocop:disable Metrics/AbcSize @records = dynamic_scaffold.list.build_sql(scope_params) @count = @records.count unless dynamic_scaffold.max_count.nil? @records = handle_pagination(@records) @records = @records.order dynamic_scaffold.list.sorter if dynamic_scaffold.list.sorter @records = @records.order(*dynamic_scaffold.list.order) unless dynamic_scaffold.list.order.empty? ret = yield(@records) if block_given? @records = ret unless ret.nil? unless @records.is_a? ::ActiveRecord::Relation raise( Error::InvalidOperation, 'You must return ActiveRecord::Relation from super block' ) end @records end |
#new ⇒ Object
rubocop:disable Metrics/AbcSize
46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/dynamic_scaffold/controller.rb', line 46 def new # rubocop:disable Metrics/AbcSize unless dynamic_scaffold.max_count.nil? count = dynamic_scaffold.list.build_sql(scope_params).count raise Error::InvalidOperation, 'You can not add any more.' if dynamic_scaffold.max_count?(count) end @record = dynamic_scaffold.model.new defaults = dynamic_scaffold.form.items.each_with_object({}) do |item, memo| memo[item.name] = item.default_value(view_context) if dynamic_scaffold.model.column_names.include?(item.name.to_s) end @record.attributes = defaults.merge(scope_params) end |
#sort ⇒ Object
111 112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/dynamic_scaffold/controller.rb', line 111 def sort pkeys_list = sort_params reset_sequence(pkeys_list.size) dynamic_scaffold.model.transaction do pkeys_list.each do |pkeys| rec = find_record(pkeys.to_hash) next_sec = next_sequence! rec[dynamic_scaffold.list.sorter_attribute] = next_sec rec.save end end redirect_to dynamic_scaffold_path(:index, request_queries) end |
#update ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/dynamic_scaffold/controller.rb', line 80 def update values = update_values @record = find_record(dynamic_scaffold.model.primary_key => params['id']) prev_attribute = @record.attributes @record.attributes = values dynamic_scaffold.model.transaction do yield(@record, prev_attribute) if block_given? if @record.save redirect_to dynamic_scaffold_path(:index, request_queries) else render "#{params[:controller]}/edit" end end end |