Redde
Admin generator for redde projects
Installation
- Add this line to your application's Gemfile and run
bundle
command:
gem 'redde'
- For the first time installation run
rails g redde:layout
This command will generate basic structure for your admin interface.
- Mound engine in your routes.rb
devise_for :managers, controllers: { registrations: 'managers/registrations' } if defined?(Devise)
mount Redde::Engine, at: '/redde'
It will disable Manager model registration with devise
and mount engine.
- Include layout concern in your ApplicationController
class ApplicationController < ActionController::Base
include Redde::Layouts
# Prevent CSRF attacks by raising an exception.
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
end
- Install and run migrations
rake redde:install:migrations
rake db:migrate
- Include assets in your
admin.js
andadmin.css
admin.js
//= require redde
admin.css
*= require redde
Scaffold
To generate admin views and controller for a model, enter:
rails g redde:scaffold ModelNames
It will generate empty controller with all needed stuff. If you want to customize it - feel free to override views and controller actions.
If you have position
field of integer type in your model, generator will add special column as a hook for sort.
You should add POST sort
action to you routes:
resources :article_categories do
post 'sort', on: :collection
end
If you have visible
field of boolean type in your model, generator will add small eye column for toggling visiblity
Notice
To customize notice, override method default_notice
in controller
Tree sort
If your model have ancestry
and position
fields, it will be rendered as tree automatically.
UrlGenerator
Redde::UrlGenerator
- is a small lib to convert title and id to combine url, used in to_param
method.
Usage example:
generator = Redde::UrlGenerator.new(1, 'тестовый заголовок $%##@$@#$')
generator.url
=> '1-testovyy-zagolovok'
Sluggable
Sluggable
is used to include into model with permanent slugs (similar to permalink).
Your ActiveRecord model should have slug
field and title field.
You can set title field by setting TITLE_FIELD
to symbol of method. This method will be used to generate slug
.
If TITLE_FIELD
constant is not set, :title
symbol will be used insted.
Usage example:
Book should have title and slug fields.
class Book < ActiveRecord::Base
TITLE_SYMBOL = :name
include Redde::Sluggable
validates :name, presence: true
end
b = Book.new(name: 'Тестовая книга')
b.save
b.slug
=> 'testovaya-kniga'
b.to_param
=> '1-testovaya-kniga'
Photos
You can attach photos to any ActiveRecord model by including
include Redde::WithPhoto
Localization
By default, views in admin interface use I18n for field names and titles. Example:
ru:
activerecord:
models:
article:
acc: статью
many: Статьи
one: Статья
other: Статьи
article_category:
acc: категорию
many: Категории
one: Категория
other: Категории
attributes:
article:
title: Заголовок
slug: URL
body: Текст
article_category:
title: Заголовок
position: Позиция
visible: Отображать на сайте
Index view customization
By default, gem will render view with all fields. You can customize this in two ways:
Array
You can INDEX_COLUMNS
array to your model to customize index fields and ther sort order by defining constant inside model
INDEX_COLUMNS = %w(title created_at)
Hash
If you need to add, for example, link to nested model, you can define hash inside model:
class Calculator < ActiveRecord::Base
INDEX_COLUMNS = {
name: '',
hop: ->(item) { ActionController::Base.helpers.link_to("На сайт (#{2 * 2})", Rails.application.routes.url_helpers.root_path(id: item.id)) }
}
FORM_COLUMNS = %w(name)
end