adminka 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/MIT-LICENSE +20 -0
- data/README.md +150 -0
- data/Rakefile +37 -0
- data/app/assets/config/adminka_manifest.js +2 -0
- data/app/assets/images/adminka/logo.png +0 -0
- data/app/assets/images/adminka/no-pic.jpg +0 -0
- data/app/assets/javascripts/adminka/application.js +28 -0
- data/app/assets/stylesheets/adminka/application.scss +21 -0
- data/app/controllers/adminka/admin_controller.rb +32 -0
- data/app/controllers/adminka/admins/registrations_controller.rb +61 -0
- data/app/controllers/adminka/admins/sessions_controller.rb +26 -0
- data/app/controllers/adminka/crud_controller.rb +60 -0
- data/app/helpers/adminka/application_helper.rb +10 -0
- data/app/jobs/adminka/application_job.rb +4 -0
- data/app/mailers/adminka/application_mailer.rb +6 -0
- data/app/models/adminka/admin.rb +14 -0
- data/app/models/adminka/application_record.rb +5 -0
- data/app/views/adminka/admin/index.html.haml +1 -0
- data/app/views/adminka/admins/confirmations/new.html.haml +10 -0
- data/app/views/adminka/admins/mailer/confirmation_instructions.html.haml +4 -0
- data/app/views/adminka/admins/mailer/password_change.html.haml +3 -0
- data/app/views/adminka/admins/mailer/reset_password_instructions.html.haml +6 -0
- data/app/views/adminka/admins/mailer/unlock_instructions.html.haml +5 -0
- data/app/views/adminka/admins/passwords/edit.html.haml +19 -0
- data/app/views/adminka/admins/passwords/new.html.haml +10 -0
- data/app/views/adminka/admins/registrations/edit.html.haml +44 -0
- data/app/views/adminka/admins/registrations/new.html.haml +29 -0
- data/app/views/adminka/admins/sessions/new.html.haml +17 -0
- data/app/views/adminka/admins/shared/_links.html.haml +19 -0
- data/app/views/adminka/admins/unlocks/new.html.haml +10 -0
- data/app/views/adminka/crud/edit.html.haml +17 -0
- data/app/views/adminka/crud/index.html.haml +36 -0
- data/app/views/adminka/crud/new.html.haml +17 -0
- data/app/views/adminka/crud/show.html.haml +18 -0
- data/app/views/adminka/form_fields/_check_box.html.haml +4 -0
- data/app/views/adminka/form_fields/_image.html.haml +6 -0
- data/app/views/adminka/form_fields/_radio.html.haml +11 -0
- data/app/views/adminka/form_fields/_select.html.haml +9 -0
- data/app/views/adminka/form_fields/_text.html.haml +4 -0
- data/app/views/adminka/form_fields/_textarea.html.haml +4 -0
- data/app/views/kaminari/bootstrap/_first_page.html.haml +2 -0
- data/app/views/kaminari/bootstrap/_gap.html.haml +2 -0
- data/app/views/kaminari/bootstrap/_last_page.html.haml +2 -0
- data/app/views/kaminari/bootstrap/_next_page.html.haml +2 -0
- data/app/views/kaminari/bootstrap/_page.html.haml +6 -0
- data/app/views/kaminari/bootstrap/_paginator.html.haml +11 -0
- data/app/views/kaminari/bootstrap/_prev_page.html.haml +2 -0
- data/app/views/layouts/adminka/admin.html.haml +57 -0
- data/app/views/layouts/adminka/auth.html.haml +28 -0
- data/config/initializers/devise.rb +276 -0
- data/config/locales/adminka.en.yml +14 -0
- data/config/locales/devise.en.yml +62 -0
- data/config/routes.rb +8 -0
- data/db/migrate/20161225073001_devise_create_adminka_admins.rb +45 -0
- data/lib/adminka.rb +11 -0
- data/lib/adminka/engine.rb +9 -0
- data/lib/adminka/staff.rb +11 -0
- data/lib/adminka/version.rb +3 -0
- data/lib/generators/adminka/controllers_generator.rb +12 -0
- data/lib/generators/adminka/locale_generator.rb +12 -0
- data/lib/generators/adminka/views_generator.rb +17 -0
- data/lib/tasks/adminka_tasks.rake +4 -0
- metadata +250 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: a34b2dd7f9d23fe3f3a59cfa2f3947c3966fcf2a
|
4
|
+
data.tar.gz: 28ab198bbe91d2439e667374da7bbeb0d1ea5071
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 614ef4ca93cf29c526af9dd20fb5e91b574ae59c04da4228dcd69ab44adcf90dea6ed642ba064ee083cfabca060e7af9adaba0d08943aea047a29bf4bfd1e38b
|
7
|
+
data.tar.gz: 2be02187948eb60c4121764d647d1f0aabf7c3193ce3a83a265b5d958a16fc9cac4d519b16337a99a60d8399d29953922fd450b971290edd67467ea9946689b2
|
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright 2016 Igor
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,150 @@
|
|
1
|
+
# Adminka
|
2
|
+
Main goal of that plugin isn't to provide an admin dashboard with huge scope of functionality and
|
3
|
+
tasty features but to provided simple GUI for CRUD and ability to scale it with own features.
|
4
|
+
Plugin uses awesome [gem Devise](https://github.com/plataformatec/devise) for users' authentication,
|
5
|
+
[gem Kaminari](https://github.com/kaminari/kaminari) for pagination and [gem Carrierwave](https://github.com/carrierwaveuploader/carrierwave)
|
6
|
+
for file uploads.
|
7
|
+
|
8
|
+
## Usage
|
9
|
+
|
10
|
+
After plugin migrations are done the next step will be mounting plugin to app routes. Insert in your routes.rb
|
11
|
+
```ruby
|
12
|
+
mount Adminka::Engine => 'admin_panel', as: "adminka"
|
13
|
+
```
|
14
|
+
Mounting path title is up to you(e.g. admin_panel, my_adminka etc.), the only thing should be
|
15
|
+
permanent is alias 'adminka'.
|
16
|
+
|
17
|
+
Congratulations! Now you can move to yourappdomain/admin_panel and you'll see login form. Of course at first you need to register
|
18
|
+
system admin. Fill in all standard fields and press Sign up. You will be redirected to root_path because newly created
|
19
|
+
admin should be activated to proceed. For activation, in your database you need to change in table adminka_admins field is_active to TRUE.
|
20
|
+
Only now your admin will be allowed to access main menu.
|
21
|
+
|
22
|
+
The next step will be a creation of proper resource to manage. Let it be user resource.
|
23
|
+
After resource creation you should pass routes to plugin by doing like this
|
24
|
+
```ruby
|
25
|
+
Rails.application.routes.draw do
|
26
|
+
|
27
|
+
resources :cities
|
28
|
+
|
29
|
+
mount Adminka::Engine => 'admin_panel', as: "adminka"
|
30
|
+
|
31
|
+
Adminka::Engine.routes.draw do
|
32
|
+
resources :users
|
33
|
+
end
|
34
|
+
end
|
35
|
+
```
|
36
|
+
and now you have restful routes to manage user resource. Then move to your controllers folder, create folder adminka and
|
37
|
+
and proper controller for you resource(e.g. users_controller).Don't forget that adminka controllers should be namespaced and inside
|
38
|
+
each resource controller you must initialize constant MODEL which holds name of proper model. See example below
|
39
|
+
|
40
|
+
```ruby
|
41
|
+
class Adminka::UsersController < Adminka::CrudController
|
42
|
+
MODEL = 'User'
|
43
|
+
end
|
44
|
+
```
|
45
|
+
|
46
|
+
Now let's provide an ability to upload avatar for users. Just install Carrierwave and follow installation instructions. As a result, for example,
|
47
|
+
you will have attribute avatar for User model and UserUploader. Well done! You can upload image for user.
|
48
|
+
The another point is pagination, it will help to manage huge amount of entities. So, we need to install Kaminari. Just add gem to your gemfile and
|
49
|
+
run bundle.That's all. The complete model should look like this:
|
50
|
+
|
51
|
+
```ruby
|
52
|
+
class User < ApplicationRecord
|
53
|
+
paginates_per 5
|
54
|
+
|
55
|
+
belongs_to :city
|
56
|
+
mount_uploader :avatar, AvatarUploader
|
57
|
+
|
58
|
+
validates :first_name, :last_name, presence: true
|
59
|
+
end
|
60
|
+
|
61
|
+
```
|
62
|
+
|
63
|
+
|
64
|
+
And the last step is creation model for resource. Adminka plugin uses .yml files to store models
|
65
|
+
data. Thus you need to move to your models folder, create folder adminka and to create user.yml file inside it.
|
66
|
+
You can see example in test/dummy/app/models/adminka directory. Below I'll provide short description of file structure:
|
67
|
+
|
68
|
+
1. Parent field *user* - it should be equal to model name.
|
69
|
+
2. *title* - left sidebar menu item title. It can be arbitrary(e.g. user, client etc).
|
70
|
+
3. *attributes* - contains info about model attributes, their types and separate them for each resource actions(C,R,U,D).
|
71
|
+
4. *list* - attributes, which will be shown by index action where resources list is present.
|
72
|
+
5. *show* - attributes, which will be shown by show action.
|
73
|
+
6. *edit* - attributes, which can be updated. Need to pay more attention to that feature. Each attribute should contain
|
74
|
+
it's title and type. Type title corresponds to html field types(e.g. radio, select, text etc). For some types you need to
|
75
|
+
provide more details:
|
76
|
+
* Type *radio* should contain field *value* and nested fields in format key: value
|
77
|
+
* Type *select* should have a foreign key name. For example, User belongs_to City, so the field name is city_id, then
|
78
|
+
*value* attribute contains proper parent model name(e.g. City), *attributes* field contains two subfields: *id*(mandatory field)
|
79
|
+
and field which contains parent model field value(e.g. *title* City title). So you have id and you want to get title of City by
|
80
|
+
using relation.
|
81
|
+
7. If your field contains image url, just assign it to type: *image*.
|
82
|
+
8. *search* - list of fields you want to provide search for(e.g. first_name, last_name)
|
83
|
+
|
84
|
+
**You can find model structure example in engine's root directory /test/dummy/app/models/adminka**
|
85
|
+
|
86
|
+
## Views
|
87
|
+
Plugin uses some defaults views and layouts and of course you can change them according to your needs. For that purpose plugin provides
|
88
|
+
views generator, just run
|
89
|
+
|
90
|
+
```bash
|
91
|
+
$ rails g adminka:views
|
92
|
+
```
|
93
|
+
and you'll get all needed views in views/adminka directory and views/layouts/adminka.
|
94
|
+
|
95
|
+
## Controllers
|
96
|
+
If you need custom behavior you can generate plugin controllers and override proper actions by running:
|
97
|
+
|
98
|
+
```bash
|
99
|
+
$ rails g adminka:controllers
|
100
|
+
```
|
101
|
+
|
102
|
+
## I18n
|
103
|
+
|
104
|
+
To generate translation files run:
|
105
|
+
|
106
|
+
```bash
|
107
|
+
$ rails g adminka:locale
|
108
|
+
```
|
109
|
+
|
110
|
+
## Installation
|
111
|
+
|
112
|
+
```ruby
|
113
|
+
gem 'adminka'
|
114
|
+
```
|
115
|
+
or if you prefer latest updates
|
116
|
+
|
117
|
+
```ruby
|
118
|
+
gem 'adminka', github: 'rockandruby/adminka'
|
119
|
+
```
|
120
|
+
|
121
|
+
And then execute:
|
122
|
+
```bash
|
123
|
+
$ bundle
|
124
|
+
```
|
125
|
+
|
126
|
+
Or install it yourself as:
|
127
|
+
```bash
|
128
|
+
$ gem install adminka
|
129
|
+
```
|
130
|
+
|
131
|
+
First of all after gem installation you need to copy migrations to your app by executing
|
132
|
+
```bash
|
133
|
+
$ rails adminka:install:migrations
|
134
|
+
```
|
135
|
+
and then migrate.
|
136
|
+
|
137
|
+
## Demo
|
138
|
+
|
139
|
+
[Demo app](https://adminka.herokuapp.com)
|
140
|
+
##### Test credentials:
|
141
|
+
|
142
|
+
> Login: bullet6666@mail.ru
|
143
|
+
|
144
|
+
> Password: 123456
|
145
|
+
|
146
|
+
## Contributing
|
147
|
+
Contribution directions go here.
|
148
|
+
|
149
|
+
## License
|
150
|
+
The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).
|
data/Rakefile
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
begin
|
2
|
+
require 'bundler/setup'
|
3
|
+
rescue LoadError
|
4
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
5
|
+
end
|
6
|
+
|
7
|
+
require 'rdoc/task'
|
8
|
+
|
9
|
+
RDoc::Task.new(:rdoc) do |rdoc|
|
10
|
+
rdoc.rdoc_dir = 'rdoc'
|
11
|
+
rdoc.title = 'Adminka'
|
12
|
+
rdoc.options << '--line-numbers'
|
13
|
+
rdoc.rdoc_files.include('README.md')
|
14
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
|
18
|
+
load 'rails/tasks/engine.rake'
|
19
|
+
|
20
|
+
|
21
|
+
load 'rails/tasks/statistics.rake'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
require 'bundler/gem_tasks'
|
26
|
+
|
27
|
+
require 'rake/testtask'
|
28
|
+
|
29
|
+
Rake::TestTask.new(:test) do |t|
|
30
|
+
t.libs << 'lib'
|
31
|
+
t.libs << 'test'
|
32
|
+
t.pattern = 'test/**/*_test.rb'
|
33
|
+
t.verbose = false
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
task default: :test
|
Binary file
|
Binary file
|
@@ -0,0 +1,28 @@
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
2
|
+
// listed below.
|
3
|
+
//
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
5
|
+
// or any plugin's vendor/assets/javascripts directory can be referenced here using a relative path.
|
6
|
+
//
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
8
|
+
// compiled file. JavaScript code in this file should be added after the last require_* statement.
|
9
|
+
//
|
10
|
+
// Read Sprockets README (https://github.com/rails/sprockets#sprockets-directives) for details
|
11
|
+
// about supported directives.
|
12
|
+
//
|
13
|
+
//= require jquery
|
14
|
+
//= require jquery_ujs
|
15
|
+
//= require bootstrap-sprockets
|
16
|
+
//= require_tree .
|
17
|
+
|
18
|
+
function readURL(input) {
|
19
|
+
if (input.files && input.files[0]) {
|
20
|
+
var reader = new FileReader();
|
21
|
+
|
22
|
+
reader.onload = function (e) {
|
23
|
+
$('#image_prev').attr('src', e.target.result)
|
24
|
+
};
|
25
|
+
|
26
|
+
reader.readAsDataURL(input.files[0]);
|
27
|
+
}
|
28
|
+
}
|
@@ -0,0 +1,21 @@
|
|
1
|
+
@import "bootstrap-sprockets";
|
2
|
+
@import "bootstrap";
|
3
|
+
|
4
|
+
.notice{
|
5
|
+
color: green;
|
6
|
+
}
|
7
|
+
|
8
|
+
#image_prev{
|
9
|
+
padding-top: 20px;
|
10
|
+
width: 20%;
|
11
|
+
}
|
12
|
+
|
13
|
+
.navbar{
|
14
|
+
background-color: #337ab7 !important;
|
15
|
+
}
|
16
|
+
h3, thead{
|
17
|
+
color: #337ab7 !important;
|
18
|
+
}
|
19
|
+
.dropdown-toggle{
|
20
|
+
color: white !important;
|
21
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Adminka
|
2
|
+
class AdminController < ActionController::Base
|
3
|
+
protect_from_forgery with: :exception
|
4
|
+
before_action :check_auth, except: [:new, :create]
|
5
|
+
|
6
|
+
layout proc { admin_signed_in? ? 'adminka/admin' : 'adminka/auth' }
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@menu = {}
|
11
|
+
Dir.glob(Rails.root + 'app/models/adminka/*.yml') do |f|
|
12
|
+
@menu.merge! YAML.load(File.read(f))
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
protected
|
17
|
+
|
18
|
+
def check_auth
|
19
|
+
if !admin_signed_in?
|
20
|
+
redirect_to new_admin_session_path
|
21
|
+
elsif admin_signed_in? && !current_admin.is_active
|
22
|
+
flash[:alert] = t('adminka.activate_acc')
|
23
|
+
redirect_to '/'
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def after_sign_out_path_for(resource_or_scope)
|
28
|
+
new_admin_session_path
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
class Adminka::Admins::RegistrationsController < Devise::RegistrationsController
|
2
|
+
before_action :configure_sign_up_params, only: [:create]
|
3
|
+
before_action :configure_account_update_params, only: [:update]
|
4
|
+
|
5
|
+
# layout 'adminka/admin', only: :edit
|
6
|
+
# GET /resource/sign_up
|
7
|
+
# def new
|
8
|
+
# super
|
9
|
+
# end
|
10
|
+
|
11
|
+
# POST /resource
|
12
|
+
# def create
|
13
|
+
# super
|
14
|
+
# end
|
15
|
+
|
16
|
+
# GET /resource/edit
|
17
|
+
# def edit
|
18
|
+
# super
|
19
|
+
# end
|
20
|
+
|
21
|
+
# PUT /resource
|
22
|
+
# def update
|
23
|
+
# super
|
24
|
+
# end
|
25
|
+
|
26
|
+
# DELETE /resource
|
27
|
+
# def destroy
|
28
|
+
# super
|
29
|
+
# end
|
30
|
+
|
31
|
+
# GET /resource/cancel
|
32
|
+
# Forces the session data which is usually expired after sign
|
33
|
+
# in to be expired now. This is useful if the user wants to
|
34
|
+
# cancel oauth signing in/up in the middle of the process,
|
35
|
+
# removing all OAuth session data.
|
36
|
+
# def cancel
|
37
|
+
# super
|
38
|
+
# end
|
39
|
+
|
40
|
+
protected
|
41
|
+
|
42
|
+
# If you have extra params to permit, append them to the sanitizer.
|
43
|
+
def configure_sign_up_params
|
44
|
+
devise_parameter_sanitizer.permit(:sign_up, keys: %i(first_name last_name))
|
45
|
+
end
|
46
|
+
|
47
|
+
# If you have extra params to permit, append them to the sanitizer.
|
48
|
+
def configure_account_update_params
|
49
|
+
devise_parameter_sanitizer.permit(:account_update, keys: %i(first_name last_name))
|
50
|
+
end
|
51
|
+
|
52
|
+
# The path used after sign up.
|
53
|
+
# def after_sign_up_path_for(resource)
|
54
|
+
# super(resource)
|
55
|
+
# end
|
56
|
+
|
57
|
+
# The path used after sign up for inactive accounts.
|
58
|
+
# def after_inactive_sign_up_path_for(resource)
|
59
|
+
# super(resource)
|
60
|
+
# end
|
61
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Adminka::Admins::SessionsController < Devise::SessionsController
|
2
|
+
# before_action :configure_sign_in_params, only: [:create]
|
3
|
+
layout 'adminka/auth'
|
4
|
+
|
5
|
+
# GET /resource/sign_in
|
6
|
+
# def new
|
7
|
+
# super
|
8
|
+
# end
|
9
|
+
|
10
|
+
# POST /resource/sign_in
|
11
|
+
# def create
|
12
|
+
# super
|
13
|
+
# end
|
14
|
+
|
15
|
+
# DELETE /resource/sign_out
|
16
|
+
# def destroy
|
17
|
+
# super
|
18
|
+
# end
|
19
|
+
|
20
|
+
# protected
|
21
|
+
|
22
|
+
# If you have extra params to permit, append them to the sanitizer.
|
23
|
+
# def configure_sign_in_params
|
24
|
+
# devise_parameter_sanitizer.permit(:sign_in, keys: [:attribute])
|
25
|
+
# end
|
26
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
module Adminka
|
2
|
+
class CrudController < AdminController
|
3
|
+
include Staff
|
4
|
+
|
5
|
+
before_action :check_auth
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@config = @menu[self.class::MODEL.downcase]
|
10
|
+
@model = Object.const_get(self.class::MODEL)
|
11
|
+
end
|
12
|
+
|
13
|
+
def index
|
14
|
+
@q = @model.ransack(params[:q])
|
15
|
+
@entities = @q.result.select(select_fields('list')).page(params[:page])
|
16
|
+
end
|
17
|
+
|
18
|
+
def create
|
19
|
+
@entity = @model.new(entity_params)
|
20
|
+
return render :new unless @entity.save
|
21
|
+
flash[:notice] = t('adminka.create')
|
22
|
+
redirect_to @entity
|
23
|
+
end
|
24
|
+
|
25
|
+
def new
|
26
|
+
@entity = @model.new
|
27
|
+
end
|
28
|
+
|
29
|
+
def show
|
30
|
+
@entity = @model.select(select_fields('show')).find(params[:id])
|
31
|
+
end
|
32
|
+
|
33
|
+
def edit
|
34
|
+
@entity = @model.select(select_fields('edit')).find(params[:id])
|
35
|
+
end
|
36
|
+
|
37
|
+
def update
|
38
|
+
@entity = @model.find(params[:id])
|
39
|
+
if @entity.update(entity_params)
|
40
|
+
flash[:notice] = t('adminka.update')
|
41
|
+
redirect_to @entity
|
42
|
+
else
|
43
|
+
render :edit
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def destroy
|
48
|
+
@model.find(params[:id]).destroy
|
49
|
+
flash[:notice] = t('adminka.delete')
|
50
|
+
redirect_to adminka.send("#{@model.to_s.downcase.pluralize}_path")
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def entity_params
|
56
|
+
params.require(@model.to_s.downcase.to_sym).permit(select_fields('edit'))
|
57
|
+
end
|
58
|
+
|
59
|
+
end
|
60
|
+
end
|