Class: RubyUIAdmin::ResourcesController

Inherits:
ApplicationController show all
Defined in:
app/controllers/ruby_ui_admin/resources_controller.rb

Instance Method Summary collapse

Instance Method Details

#createObject



64
65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 64

def create
  @record = @resource.new_record
  authorize_action!(:create, on: @record, policy_class: policy_class)
  @resource.hydrate(record: @record, view: :new)
  @resource.apply_defaults(@record)
  fill_record(@record, :new)

  if @record.save
    create_success_action
  else
    create_fail_action
  end
end

#destroyObject



96
97
98
99
100
101
102
103
104
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 96

def destroy
  authorize_action!(:destroy, on: @record, policy_class: policy_class)

  if @record.destroy
    destroy_success_action
  else
    destroy_fail_action
  end
end

#editObject



78
79
80
81
82
83
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 78

def edit
  authorize_action!(:update, on: @record, policy_class: policy_class)
  @resource.hydrate(record: @record, view: :edit)

  render Views::Form.new(resource: @resource, record: @record, view: :edit)
end

#indexObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 9

def index
  authorize_action!(:index, on: model_class, policy_class: policy_class)

  query = authorization_for(model_class, policy_class: policy_class).apply_policy(@resource.base_query)
  query = apply_scope(query)
  query = apply_filters(query)
  query = apply_sorting(query)

  limit = RubyUIAdmin.configuration.per_page
  countless = @resource.class.countless || RubyUIAdmin.configuration.countless_pagination?
  @pagy, @records =
    if countless
      pagy_countless(query, limit: limit)
    else
      pagy(query, limit: limit)
    end

  render Views::Index.new(
    resource: @resource,
    records: @records,
    pagy: @pagy,
    filters: @resource.get_filters,
    filter_values: filter_params,
    scopes: @resource.get_scopes,
    current_scope_key: current_scope&.key,
    scope_param: params[:scope],
    remove_scope_all: @resource.remove_scope_all?,
    query_params: request.query_parameters,
    sort_by: params[:sort_by],
    sort_direction: sort_direction
  )
end

#newObject



55
56
57
58
59
60
61
62
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 55

def new
  @record = @resource.new_record
  authorize_action!(:create, on: @record, policy_class: policy_class)
  @resource.hydrate(record: @record, view: :new)
  @resource.apply_defaults(@record)

  render Views::Form.new(resource: @resource, record: @record, view: :new)
end

#showObject



42
43
44
45
46
47
48
49
50
51
52
53
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 42

def show
  authorize_action!(:show, on: @record, policy_class: policy_class)
  @resource.hydrate(record: @record, view: :show)

  # `?tab=N&fragment=1` returns just one tab's content (no page chrome) for lazy tab loading,
  # so that tab's fields/associations are only evaluated when the tab is actually opened.
  if params[:fragment] && params[:tab]
    render Views::ShowTab.new(resource: @resource, record: @record, tab_index: params[:tab].to_i)
  else
    render Views::Show.new(resource: @resource, record: @record)
  end
end

#updateObject



85
86
87
88
89
90
91
92
93
94
# File 'app/controllers/ruby_ui_admin/resources_controller.rb', line 85

def update
  authorize_action!(:update, on: @record, policy_class: policy_class)
  fill_record(@record, :edit)

  if @record.save
    update_success_action
  else
    update_fail_action
  end
end