その他のcurl_scaffold用テンプレートファイル
curl_scaffoldジェネレータが作成するアプリはHTML用のテンプレートや処理はいりませんので、curl_scaffoldに必要な最低限のファイルやコードのみ作ることにします。
コントローラ
コントローラはHTML・XMLページの表示や、HTMLアプリでしか必要のないnew・editメソッドを省略しました。
また、CSRF対策用のチェックverify_authenticity_token処理をskip_before_filterで指定して行わないようにしました。これでapp/controllers/application_controller.rb内のprotect_from_forgeryを変更しなくてもよくなります。
class <%= controller_class_name %>Controller < ApplicationController skip_before_filter :verify_authenticity_token def start render :layout => false, :content_type => 'text/vnd.curl' end def index @<%= table_name %> = <%= class_name %>.all respond_to do |format| format.json { render :json => @<%= table_name %> } end end def show @<%= file_name %> = <%= class_name %>.find(params[:id]) respond_to do |format| format.json { render :json => @<%= file_name %> } end end def create @<%= file_name %> = <%= class_name %>.new(params[:<%= file_name %>]) respond_to do |format| if @<%= file_name %>.save format.json { render :json => @<%= file_name %>, :status => :created, :location => @<%= file_name %> } else format.json { render :json => @<%= file_name %>.errors, :status => :unprocessable_entity } end end end def update @<%= file_name %> = <%= class_name %>.find(params[:id]) respond_to do |format| if @<%= file_name %>.update_attributes(params[:<%= file_name %>]) format.json { head :ok } else format.json { render :xml => @<%= file_name %>.errors, :status => :unprocessable_entity } end end end def destroy @<%= file_name %> = <%= class_name %>.find(params[:id]) @<%= file_name %>.destroy respond_to do |format| format.json { head :ok } end end end
JSON出力形式の指定
前回は、JSON出力形式の指定ActiveRecord::Base.include_root_in_json = falseをconfig/environment.rbに書きましたが、今回は専用の初期化ファイルを作ります。Ruby on Railsではconfig/initializersディレクトリにあるファイルはサーバ起動時に実行されるので、ここにsetup_json.rbというファイルで指定します。
ActiveRecord::Base.include_root_in_json = false
なお、config/initializersディレクトリ下のファイルはアルファベット順に実行されるので、複数のファイルで同じ項目の設定を行う場合はファイル名が重要になります。今回のJSON出力形式の指定はnew_rails_defaults.rbでも指定されているので"n"より後ろのファイル名にしました。
ライセンスファイル
Curlのライセンスファイルの設置もcurl_scaffoldジェネレータで行うことにします。