ジェネレータのカスタマイズコード その2
「controller.rb」テンプレートのカスタマイズ
「controller.rb」テンプレートは、Webサービスのコントローラクラスを作成するテンプレートです。wsdl_service_nameでサービス名を、web_service_apiでサービスのAPI定義を指定しています。web_service_scaffold :invokeはブラウザ上でWebサービスをテストするために必要です。
find_allでテーブルの全情報を一覧検索しています。find(:all)のようにallを指定することで、全情報を取得することができます。
create(arg_<%= file_name %>)で新規作成のメソッドを生成します。<% for column in @model_klass.columns %>でデータベース上のテーブルにアクセスし、Webサービスメソッドcreateに対して与えられたデータ型からの移送文をコーディングしています。
created_atやupdated_atはRailsで自動更新の対象になっているため、Webサービスを呼び出した側からの移送文をコード化しないようにしています。updateに対しても同様のことを行っています。
class <%= class_name %>ServiceController < ApplicationController wsdl_service_name '<%= class_name %>Service' web_service_api '<%= class_name %>Service' web_service_scaffold :invoke <% for method_name in args -%> def <%= method_name %> end <% end -%> #------------------------------------------------------------------ # 全~を取得します。 #------------------------------------------------------------------ def find_all <%= class_name %>.find(:all) end #------------------------------------------------------------------ # ~を新規作成します。 #------------------------------------------------------------------ def create(arg_<%= file_name %>) <%= file_name %> = <%= class_name %>.new <% @model_klass = Module.const_get(class_name) %> <% for column in @model_klass.columns %> <% if column.name == 'id' or column.name== 'created_at' or column.name == 'updated_at' next end %> <%= file_name %>.<%= column.name %>
= arg_<%= file_name %>.<%= column.name %> <% end %> if <%= file_name %>.save return "Succeeded" else return "Failed" end end #------------------------------------------------------------------ # ~を更新します。 #------------------------------------------------------------------ def update(arg_<%= file_name %>) <%= file_name %> = <%= class_name %>.find(arg_<%= file_name %>.id) unless <%= file_name %> return "Not Found." end <% @model_klass = Module.const_get(class_name) %> <% for column in @model_klass.columns %> <% if column.name == 'id' or column.name
== 'created_at' or column.name == 'updated_at' next end %> <%= file_name %>.<%= column.name %>
= arg_<%= file_name %>.<%= column.name %> <% end %> if <%= file_name %>.update return "Succeeded" else return "Failed" end end #------------------------------------------------------------------ # ~を削除します。 #------------------------------------------------------------------ def destroy(arg_<%= file_name %>) <%= file_name %>
= <%= class_name %>.find(arg_<%= file_name %>.id) if <%= file_name %>.destroy return "Succeeded" else return "Failed" end end end

== 'created_at'