SpecialGenerationを試す

空の軌跡3rdのプレーを中断してから、かれこれ1ヶ月が過ぎました。
そもそもは空の軌跡のアイテムの組み合わせのルールが意外と面倒でしたので、「それを100時間くらい使って、簡単にシミュレーションしよう」というのが今回の企画のスタートラインでした。
前田さんのRails本はすでに読んでいましたが、参照性の低いためすぐに開発に入る気になれず、舞波さんの優しいRailsの育て方を1から読むことにした次第。
現時点でようやく、20画面からなるマスタメンテ画面が一通り完成です。
実際にコードを書いている時間を考えると、思いの外簡単にできてしまったというのが素直な感想です。

今回の開発では、舞波さんがメンテされているスペジェネを使っています。
indexアクションがAjax対応ということでしたが、デフォルトのままではきちんと動いてくれないようで、今のところ意識的に使わないようにしています。
ちなみに、Ruby 1.8.6p36(mswin32) + Rails 1.2.3の環境だと、indexアクション実行時にエラーが発生します。

  ActionView::TemplateError (wrong number of arguments (1 for 0)) on line #2 of app/views/maint/quart/_ajax_list_record.rhtml: <%- for column in Maint::QuartController.visible_columns(@action_name) -%>
  2:     <td><%= human_attribute_ipe('quart', column.name, {}, localize(:ipe, :options)) %></td>
  3:   <%- end -%>
  4:   <%- Maint::QuartController.each_reflection do |ref| -%>
  5:     <td align=center><%= ajax_link_to_association(ref, @quart) -%></td>

      C:/usr/ruby-1.8/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/helpers/form_helper.rb:332:in `value'
      C:/usr/ruby-1.8/lib/ruby/gems/1.8/gems/actionpack-1.13.3/lib/action_view/helpers/form_helper.rb:332:in `to_content_tag' #{RAILS_ROOT}/app/helpers/ipe_helper.rb:50:in `in_place_collection_editor_field'
      #{RAILS_ROOT}/app/helpers/ipe_helper.rb:62:in `human_attribute_ipe'

value っていうメソッド名もどうかと思いますが、さらにそれに引数を付けて呼び出すのも変な気がします。とりあえず、いつまでもエラーが発生するのもイヤですので、こんな感じで修正しておきました。

  --- form_helper.old.rb  2007-07-13 00:28:13.935889600 +0900
  +++ form_helper.rb      2007-08-16 02:11:57.948859200 +0900
  @@ -329,7 +329,7 @@
         end

         def to_content_tag(tag_name, options = {})
  -        content_tag(tag_name, value(object), options)
  +        content_tag(tag_name, value2(object), options)
         end

         def object
  @@ -340,6 +340,10 @@
           self.class.value(object, @method_name)
         end

  +      def value2(object)
  +        self.class.value(object, @method_name)
  +      end
  +
         def value_before_type_cast(object)
           self.class.value_before_type_cast(object, @method_name)
         end

value2というメソッド名は「もっと無い!」気もしますが、余り気にしないことにします。(^^;