[gem] 常用模組套件
tags: gem
, ruby
, package
, Rails
Package | 描述 | 其他說明 |
---|---|---|
Devise | 驗證使用者 | 使用者認證(ihower), Ruby on Rails 實戰聖經(ihower) |
Rolify | 管理使用者角色 | ... |
enumerize | 方便取得資料庫內容 | ... |
taggable | ... | ... |
act_as_list | 排序列表中的物件 | ... |
AASM | 流程管理 | ... |
carrierwave | 圖片上傳處理 | ... |
chartkick | 圖表繪製 | 在 Rails 中可以同時使用 chart.js, google charts 和 High Charts |
gem install gem_name
bundler
nokogiri
rails
pg # postgreSql
# Paginator for Rails 4+
gem 'kaminari', '~> 1.0', '>= 1.0.1'
# Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
gem 'enumerize', '~> 2.0', '>= 2.0.1'
# Flexible authentication solution for Rails with Warden
gem 'devise', '~> 4.3'
# 讓 Rails Console 好看很多
gem 'pry-rails', '~> 0.3.4'
# Supporting gem for Rails Panel (Google Chrome extension for Rails development)
gem 'meta_request', '~> 0.4.3'
# help to kill N+1 queries and unused eager loading.
gem 'bullet', '~> 5.5', '>= 5.5.1'
# A static analysis security vulnerability scanner for Ruby on Rails applications
gem 'brakeman', require: false
# rspec command for spring
gem 'spring-commands-rspec'
kaminari
製作自動分頁功能 。後面的 per(5)
就是「每頁有 5 筆資料」的意思:
# ./app/controllers/admin/coupons_controller.rb
# controller
def index
# 原本是 @posts = Post.all
@posts = Post.includes(:user).page(params[:page]).per(5)
# 透過 AJAX 更新
respond_to do |format|
format.html
format.js
end
end
打開相對應的 view,在想要加上分頁的地方加上 <%= paginate @posts, remote: true %>
。
建立一支相對應的 JS 檔
// .app/views/admin/events/show.js.erb
document.querySelector('#order-list').innerHTML =
"<%= escape_javascript(render 'orders', orders: @orders) %>";
enumerize
可以在 Rails 中更方便取用 enumerize 的資料。
基本設定
使用 enumerize
關鍵字:
# migration(Active Record)
class User
extend Enumerize
enumerize :sex, in: [:male, :female]
end
取值
# controller
# 取得某個欄位的屬性值
@user.sex_text # or @user.sex.text
# 取得某個 enumerized 屬性的所有值
User.sex.values # or User.enumerized_attributes[:sex].values
在表單中使用時,支援 :only
和 :except
# erb
<%= form_for @user do |f| %>
<%= f.select :sex, User.sex.options %>
<% end %>
Boolean 方法
user.sex = :male
user.sex.male? #=> true
user.sex.female? #=> false
Predicate 方法
# model
class User
extend Enumerize
enumerize :sex, in: %w(male female), predicates: true
end
user = User.new
user.male? # => false
user.female? # => false
user.sex = 'male'
user.male? # => true
user.female? # => false
在不同的 model 中共享相同的 enumerize
可以使用 Ruby 的 Module:
module PersonEnumerations
extend Enumerize
enumerize :sex, in: %w[male female]
end
class Person
include PersonEnumerations
end
class User
include PersonEnumerations
end
為 enumerized 屬性添加值
class User < ActiveRecord::Base
extend Enumerize
enumerize :role, in: {:user => 1, :admin => 2}
end
user = User.new
user.role = :user
user.role #=> 'user'
user.role_value #=> 1
User.role.find_value(:user).value #=> 1
User.role.find_value(:admin).value #=> 2
chartkick
安裝
在 Rails 的 Gemfile
中加入:
gem "chartkick"
在 ./app/assets/javascripts/application.js
中加入:
//= require Chart.bundle
//= require chartkick
即可開始使用。