その他の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ジェネレータで行うことにします。

