1.這是 Rails 4 & Ruby 1.9.3 的專案雛形。 2.下載下來後要重新 rake db:migrate 再執行 rails s。
Gemfile
gem 'rails_admin' gem 'carrierwave'
Run Command Line
# 其 devise Model Name 使用預設的就可以了
# 基本上一路 Enter 即可。
rails g rails_admin:install
# 建立書庫範例, 展示 Carrierwave 部分
# or rails g scaffold book label:string covery:string
# 使用 Scaffold/Resource 可增加幾個 rails_admin 的頁面接口
rails g model book label:string cover:string
# 只會給一個 Model。
or
rails g scaffold book label:string cover:string
# 會給一個已經實做好 index,create,update,delete,new,show,edit 等 Action 的 Controller & View
# 推薦這個方法把 View 保留, 再把 format 寫死即可!( 參考 "設定 Controller 只回復 JSON" 篇 )
or
rails g resource book label:string cover:string
# 會給一個空的 Controller 要自己實作 index,create,update,delete,new,show,edit 等 Action
#
# 注意在 rails4 的版本不推薦使用 rails g resource, 因為其他 format 還是需要仰賴 view 的存在!
# 因為至少需要 index.json.jbuilder & show.json.jbuilder 這兩個檔案在 view 裡面!
# 建立檔案上傳器
rails generate uploader Avatar
# app/models/books.rb
class Book < ActiveRecord::Base
mount_uploader :cover, AvatarUploader
# 將上傳器綁定給 Book Model 的 Cover Field
end
# Data Migration
bundle exec rake db:migrate
# 註冊好帳號之後關閉 Devise 註冊功能
# app/model/user.rb
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable,
#:registerable,
#:recoverable,
:rememberable,
:trackable,
:validatable
# recoverable: send mail for recover user:password Link.
# registerable: enable/disable register
end
Carrierwave Uploader 增加中文字支援
# 參考:https://github.com/carrierwaveuploader/carrierwave
# avatar_uploader.rb
class AvatarUploader < CarrierWave::Uploader::Base
...
CarrierWave::SanitizedFile.sanitize_regexp = /[^[:word:]\.\-\+]/
...
end
# 要注意它是 UTF-8 路徑與檔名, 所以 Windows 下最好不要開起中文路徑。
# 因為 Windows 的文件名稱是 CP950。所以會顯示找不到檔案!
# 否則一樣看不到檔案。
登入後台並建立使用者
# 訪問網址 /admin ( 先前 rails_admin:install 第一個問題 ) # 使用 devise 介面點選 sign up 註冊一個管理員帳號
複寫Rails Admin的介面
# 根據 rails_admin 套件的目錄參考 /app/views/rails_admin/main/*
# 以 haml 標記語言,並有以下文件:
...
index.html.haml # 就是 list 的公版
edit.html.haml
new.html.haml
show.html.haml
...
等等。
# 在專案的 /app/views/rails_admin/main/ 位置建立你要複寫的模板即可!
讓後台增加中文語系支援
# 參考:https://github.com/svenfuchs/rails-i18n/blob/master/rails/locale/zh-TW.yml
# 下載:zh-TW.yml http://github.com/svenfuchs/rails-i18n 到 config/locale/zh-TW.yml
下,就有預設的 Rails 繁體中文翻譯。
# 參考:https://github.com/sferik/rails_admin/wiki/Translations
# 下載 rails_admin.zh-TW.yml,並放到專案的 config/locales/rails_admin.zh-TW.yml
# 在 application.rb 內設定語系
module RoRRailsAdminScaffold
class Application < Rails::Application
...
#config.i18n.default_locale = :da
# 增加這一行
config.i18n.default_locale = 'zh-TW'
...
end
end
自製 API 範例
# 使用 rails scaffold 即可
rails g scaffold todo label:string summary:text
# 將產出 controller
# 注意:
如果你只要 JSON API 那就只需要建立 Model、Controller 即可。
設定 Controller 只回覆 JSON
# 設定預設的回覆格式
# routes.rb
resources :todo3s, :defaults=>{format: :json}
# 或是直接給 Action 加上也可以強制指定
respond_to :json # 建議寫這樣寫
or
render :json => @model_instace # 不建議這樣寫(加在Action最後一行)
ex:
def index
# 讓這個 Controller 只會回覆 JSON 格式
@todo3s = Todo3.all
respond_to :json
end
CSRF Token 保護機制開關
# application_controller.rb protect_from_forgery with: :exception # 註銷就是關閉
Ajax Restful CRUD
# public/index.html
# 內有展示 JQuery Ajax Restful 的範例!
...
$.ajax({
url:'/todo3s/'+id.toString()+'.json',
type:'put',
data:{
todo3:{
label:'ajax put modify'
}
},
dataType:'json',
success:function(res,status,xhr){
console.log(res);
}
});
...
問題排除
1.要注意安裝順序,有時候安裝順序不對會出現一些BUG。 2.如果出現 undefined gsub method miss 等訊息就重裝吧! 3.也可以考慮根據 Console 的 Error 訊息去增加 gsub 方法。 4.修改 .gitignore 將一些排除的檔案提除。