Tìm hiểu gem rails admin
Bài đăng này đã không được cập nhật trong 2 năm
1. Giới thiệu
Rails admin sẽ tạo giao diện của admin bằng cách kiểm tra model ứng dụng của bạn, và theo một số quy tắc của rails.
2. Hướng dẫn cài đặt để tạo ứng dụng
Bước đầu tiên, ta sẽ tạo một project trong rails
rails new rails_admin
Cài đặt gem "rails_admin" trong Gemfile
gem 'rails_admin'
Bundle install, sau đó chạy lệnh
rails g rails_admin:install
Nó sẽ tạo ra file config/initializers/rails_admin.rb, các action trong giao diện admin sẽ phụ thuộc vào file này.
RailsAdmin.config do |config|
### Popular gems integration
## == Devise ==
# config.authenticate_with do
# warden.authenticate! scope: :user
# end
# config.current_user_method(&:current_user)
## == Cancan ==
# config.authorize_with :cancan
## == PaperTrail ==
# config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0
### More at https://github.com/sferik/rails_admin/wiki/Base-configuration
config.actions do
dashboard # mandatory
index # mandatory
new
export
bulk_delete
show
edit
delete
show_in_app
## With an audit adapter, you can add:
# history_index
# history_show
end
end
3. Giao diện mặc định khi sử dụng của gem rails admin
Chúng ta sẽ tạo một store gồm name và description và book gồm name va reference đến store
rails g model store name:string description:text
rails g model books name:string store:references
Tạo quan hệ một nhiều
class Book < ActiveRecord::Base
belongs_to :store
end
class Store < ActiveRecord::Base
has_many :books
end
Chạy cơ sở dữ liệu:
rake db:create db:migrate
Chạy server, tại http://localhost:3000/admin ta có
Rails admin đã tạo ra giao diện của admin như trên hình, với các action, thêm , filter, show list danh sách của book, của store... Trong list of books hoặc list of store ta có các action như thêm, sửa, xóa, show...
Trong bài viết ta sẽ chỉ đề cập đến giao diện của admin do rails admin tạo ra để quản lý stores, books
4. Custom gem rails admin
Giao diện do rails admin tạo ra đã có đầy đủ các action cần thiết. Đôi khi, để tối ưu giao diện, chúng ta có thể bỏ đi một số chức năng, hoặc custom lại giao diện theo ý của mình. Ở phần này, sẽ hướng dẫn các bạn custom view, action, js trong rails admin
Trước hết, ta tạo một file show_store.rb trong lib/rails_admin/show_store.rb
module RailsAdmin
module Config
module Actions
class ShowStore < RailsAdmin::Config::Actions::Base
RailsAdmin::Config::Actions.register(self)
# hien action
register_instance_option :visible? do
true
end
register_instance_option :member do
true
end
register_instance_option :pjax? do
false
end
# icon cua action
register_instance_option :link_icon do
"icon-info-sign"
end
register_instance_option :http_methods do
[:get, :post]
end
register_instance_option :route_fragment do
custom_key.to_s
end
register_instance_option :action_name do
custom_key.to_sym
end
register_instance_option :custom_key do
key
end
register_instance_option :controller do
proc do
if request.get?
@store = Store.find params[:id]
@books = @store.books
end
end
end
def key
self.class.key
end
end
end
end
end
Lưu ý: khi thay đổi file này, ta cần phải restart lại server
Trong file config/initializers/rails_admin.rb
require Rails.root.join("lib", "rails_admin", "show_store.rb")
RailsAdmin::Config::Actions.register(RailsAdmin::Config::Actions::ShowStore)
RailsAdmin.config do |config|
config.actions do
dashboard
index
new
export
bulk_delete
# show mac dinh cua rails admin se khong dc dung trong show store, nhung van duoc dung trong show book
show do
except Store
end
# phan show cua store se duoc custom nhung khong anh huong den show cua book
show_store do
only Store
end
edit
delete
show_in_app
end
end
Ta có đoạn lệnh giúp rails_admin nhận biết được file show_store.rb
require Rails.root.join("lib", "rails_admin", "show_store.rb")
RailsAdmin::Config::Actions.register(RailsAdmin::Config::Actions::ShowStore)
Bước cuối cùng, chúng ta sẽ tạo file show_store.html.erb trong view/rails_admin/main và custom lại show store theo ý của mình.
Ví dụ:
<% if @books.any? %>
<label class="books-count">
<%= pluralize @books.count, t("books") %>
</label>
<table class="table">
<tbody>
<% @books.each do |book| %>
<tr>
<td>
<div class="form-group">
<%= link_to book.name, rails_admin.show_path("book", book.id) %>
</div>
</td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<%= t "admin.actions.no_book" %>
<% end %>
Một số chú ý khác khi muốn viết jquery cho ứng dụng của mình ta viết trong app/assets/javascripts/rails_admin/custom/ui.js, muốn custom css ta viết trong stylesheets/rails_admin/custom/theming.scss
5. Kết luận
Qua đây, ta nhận thấy rails admin là một công cụ khá mạnh giúp ta có thể tạo giao diện của admin một cách dễ dàng.
6. Tài liệu tham khảo
https://github.com/sferik/rails_admin http://www.slideshare.net/benoitbenezech/rails-admin-overbest-practices
All rights reserved