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
- #sort ⇒ Object
- #update ⇒ Object
Instance Method Details
#create ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'lib/dynamic_scaffold/controller.rb', line 59 def create @record = dynamic_scaffold.model.new prev_attribute = @record.attributes @record.attributes = update_values bind_sorter_value(@record) if dynamic_scaffold.list.sorter dynamic_scaffold.model.transaction do yield(@record, prev_attribute) if block_given? if @record.save redirect_to dynamic_scaffold_path(:index) else render "#{params[:controller]}/new" end end end |
#destroy ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/dynamic_scaffold/controller.rb', line 89 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') end redirect_to dynamic_scaffold_path(:index) end |
#edit ⇒ Object
55 56 57 |
# File 'lib/dynamic_scaffold/controller.rb', line 55 def edit @record = find_record(edit_params) end |
#index ⇒ Object
Actions
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/dynamic_scaffold/controller.rb', line 26 def index # rubocop:disable Metrics/AbcSize @records = dynamic_scaffold.model.all raise Error::Controller, 'You must return ActiveRecord::Relation' unless @records.is_a? ::ActiveRecord::Relation if dynamic_scaffold.list.pagination @records = @records .page(params[dynamic_scaffold.list.pagination.param_name]) .per(dynamic_scaffold.list.pagination.per_page) end @records = @records.where scope_params @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? @records = yield(@records) if block_given? raise Error::Controller, 'You must return ActiveRecord::Relation' if @records.nil? @records end |
#new ⇒ Object
45 46 47 48 49 50 51 52 53 |
# File 'lib/dynamic_scaffold/controller.rb', line 45 def new @record = dynamic_scaffold.model.new defaults = dynamic_scaffold.form.items.each_with_object({}) do |item, memo| memo[item.name] = item.default if dynamic_scaffold.model.column_names.include?(item.name.to_s) end @record.attributes = defaults.merge(scope_params) end |
#sort ⇒ Object
102 103 104 105 106 107 108 109 110 111 112 113 114 |
# File 'lib/dynamic_scaffold/controller.rb', line 102 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) end |
#update ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 86 87 |
# File 'lib/dynamic_scaffold/controller.rb', line 74 def update values = update_values @record = find_record(extract_pkeys(values)) 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) else render "#{params[:controller]}/edit" end end end |