サブディレクトリ内のコントローラに同一ディレクトリ内のapplication.rhtmlを適用
admin/top_controller.rbにはviews/layouts/admin/application.rhtmlを自動的に適用して欲しかったので、とりあえず次のようにしてみた。
app/controller/application.rb
class ApplicationController < ActionController::Base class <<self def default_layout_with_subdirectory l = default_layout_without_subdirectory if l == 'application' and name.include? '::' subdir_layout = "#{File.dirname name.underscore}/application" if File.exist? "#{RAILS_ROOT}/app/views/layouts/#{subdir_layout}.rhtml" return subdir_layout end end l end alias_method_chain :default_layout, :subdirectory end # 以下略
(注)application.rxmlには対応してません。
クレヨンフィジックスデラックスもどきを作ってみよう
上の動画がすごく面白くて自分でも触ってみたくなったのでちょっと作ってみました。まだ全然完成とかじゃないけど、さっくり動かしただけでも思いのほか楽しかったのでとりあえず公開。一晩でざっと組んだものなので図形の判定とかはかなり適当です・・・。
http://blog.technohippy.net/Sketch.swf
ここからどう拡張しようかなぁ・・・。
ActiveRecordの抽象サブクラスを作る
普通にActiveRecordのサブクラスを作るとSTIと見なされて、サブクラスはテーブルと一対一対応にはなりません。親クラスだけがテーブルと対応してて、サブクラスのインスタンスには親クラステーブルから必要なのだけとってきて設定される感じ。
これはこれで便利なんだろうけど、そうじゃなく逆にサブクラスがテーブルと対応してて親クラスはサブクラスを抽象化した存在であってほしいこともあります。そういう時はこう。
class AbstractClass < ActiveRecord::Base self.abstract_class = true end class OneSubClass < AbstractClass; end class AnotherSubClass < AbstractClass; end
こうするとabstract_classesテーブルではなく、one_sub_classesテーブルとanother_sub_classesテーブルにちゃんとデータが保持されます。