Rails2系アプリの管理機能を10分で作る方法
Rails 2.2.2で作ったWEBアプリの管理サイトを/admin/で始まるURLで作る手順をまとめました。
例えば「カテゴリー」(Category name:string position:integer)というモデルがあって、
そのマスターデータを管理したいという前提で。
(1)scaffoldをgenerateする
ruby script/generate rspec_scaffold Admin::Category name:string position:integer
って感じのコマンドでスケルトンを作ります。
(2)不要なファイルの削除
前の手順で「Admin::Category」を対象とした migration やら model やらが生成されます。
これは既存の「Category」を対象にしたいのでmodel関連の余計なファイルは削除します。
ruby script/destroy rspec_model Admin::Category
(3)変数名の置換
- 「Admin::Category.」を「Category.」に
- 「Admin::Category,」を「Category,」に
- 「Admin::Category 」を「Category 」に
- 「@admin_categories」を「@categories」に
します。コマンドで実行すると以下。
(grep の l オプションはファイル名のみ出力。v オプションは該当するファイルを除外。の意)。
grep -lr "Admin::Category." * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/Admin::Category\./Category\./g" grep -lr "Admin::Category," * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/Admin::Category,/Category,/g" grep -lr "Admin::Category " * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/Admin::Category /Category /g" grep -lr @admin_categories * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/@admin_categories/@categories/g"
(4)URL関連のヘルパー名を置換
- 「category_path」を「admin_category_path」に
- 「categories_path」を「admin_categories_path」に
- 「category_url」を「admin_category_url」に
- 「categories_url」を「admin_categories_url」に
します。コマンドは以下。
grep -lr category_path * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back 's/category_path/admin_category_path/g' grep -lr categories_path * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back 's/categories_path/admin_categories_path/g' grep -lr category_url * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back 's/category_url/admin_category_url/g' grep -lr categories_url * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back 's/categories_url/admin_categories_url/g'
(5)link_toの引数を書き換え
- 「link_to 'Show', category」を「link_to 'Show', admin_category_path(category)」に
- 「link_to 'Show', @category」を「link_to 'Show', admin_category_path(@category)」に
- 「link_to 'Destroy', category」を「link_to 'Destroy', admin_category_path(category)」に
- 「link_to 'Destroy', @category」を「link_to 'Destroy', admin_category_path(@category)」に
それぞれ置換。コマンドは以下。
grep -lr link_to * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/link_to 'Show', category/link_to 'Show', admin_category_path(category)/g" grep -lr link_to * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/link_to 'Show', @category/link_to 'Show', admin_category_path(@category)/g" grep -lr link_to * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/link_to 'Destroy', category/link_to 'Destroy', admin_category_path(category)/g" grep -lr link_to * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/link_to 'Destroy', @category/link_to 'Destroy', admin_category_path(@category)/g"
(6)その他の置換
- 「/admin_categories」を「/admin/categories」に
- 「:controller => "admin_categories"」を「:controller => "admin/categories"」に
- 「redirect_to(@category)」を「redirect_to(admin_category_url(@category))」に
- 「assigns[:admin_categories]」を「assigns[:categories]」に
します。コマンドは以下。
grep -lr /admin_categories * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/\/admin_categories/\/admin\/categories/g" grep -lr ':controller => "admin_categories"' * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/:controller => \"admin_categories\"/:controller => \"admin\/categories\"/g" grep -lr "redirect_to(@category)" * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/redirect_to(@category)/redirect_to(admin_category_url(@category))/g" grep -lr ":admin_categories" * | grep -v svn | grep -v back | grep -v log \ | xargs sed -i.back "s/assigns\[:admin_categories\]/assigns\[:categories\]/g"
(7)form_forの引数を書き換え
- new.html.erb の「form_for(@category)」を「form_for(@category, :url=>admin_categories_path)」に
- edit.html.erb の「form_for(@category)」を「form_for(@category, :url=>admin_category_path(@category))」に
それぞれ書き換えます。
(8)routes.rbの編集
map.resources :categories
を
map.namespace :admin do |admin| admin.resources :categories end
にします。