Module: DcidevActiveRecord

Extended by:
ActiveSupport::Concern
Defined in:
lib/dcidev_active_record.rb

Instance Method Summary collapse

Instance Method Details

#reorderObject



73
74
75
76
77
78
79
# File 'lib/dcidev_active_record.rb', line 73

def reorder
  return unless self.class.column_names.include?("view_order")
  return unless self.class.where(view_order: self.view_order).where.not(id: self.id).present?
  self.class.order(view_order: :asc, updated_at: :desc).each.with_index(1) do |f, i|
    f.update(view_order: i)
  end
end

#replace_child_from_array(new_child = [], column_name: "", child_name: "") ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/dcidev_active_record.rb', line 25

def replace_child_from_array(new_child = [], column_name: "", child_name: "")
    new_child = new_child.to_a
    formatted = []
    existing_child = eval("self.#{child_name}")
    existing_child_values = existing_child.pluck(column_name.to_sym)
    delete_child = existing_child_values - new_child
    (existing_child_values + new_child).uniq.each do |lc|
        attr = { column_name => lc, "_destroy" => delete_child.include?(lc) }
        id = existing_child.detect { |ec| eval("ec.#{column_name} == #{lc.is_a?(String) ? "'#{lc}'" : lc}") }
        attr["id"] = id.id if id.present?
        formatted << attr
    end
    formatted
end

#set_orderObject



63
64
65
66
67
68
69
70
71
# File 'lib/dcidev_active_record.rb', line 63

def set_order
  return unless self.class.column_names.include?("view_order")
  if self.view_order.present?
    self.reorder
  else
    self.view_order = self.class.where.not(id: self.id).count + 1
    self.save
  end
end

#update_by_params(params, set_nil = true) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/dcidev_active_record.rb', line 40

def update_by_params(params, set_nil = true)
  ActiveRecord::Base.transaction do
    self.class.column_names.each do |c|
      begin
        if set_nil
          eval("self.#{c} = params[:#{c.to_sym}]") if params.key?(c.to_sym)
          eval("self.#{c} = params['#{c}']") if params.key?(c)
        else
          eval("self.#{c} = params[:#{c.to_sym}]") if params.key?(c.to_sym) && params[c.to_sym] != nil
          eval("self.#{c} = params['#{c}']") if params.key?(c) && params[c] != nil
        end
      rescue IOError
        raise "Tidak dapat menyimpan file#{c}"
      end
    end
    params.select{|k, _| !k.is_a?(Symbol) && k.include?("_attributes")}.each do |k, _|
      eval("self.#{k} = params[:#{k.to_sym}]")
    end
    self.save
  end
end