私は Ruby と Rails (およびプログラミング!) が初めてで、モデルからその STI の子にプロパティを渡す慣用的な方法を理解しようとしています。
一般的なモデル「ドキュメント」と、それを継承するいくつかのモデルがあります — 「チュートリアル」を例に取りましょう。「アイコン」の文字列フィールドがあり、そこにアイコンのファイル名を保存しますが、フルパスは保存しません (レコードのデータを取得する詳細であるため、パスは各モデルまでにする必要があると思いますか?):
class Document < ActiveRecord::Base
attr_accessible :title, :body, :icon
@@asset_domain = "http://assets.example.com/"
@@asset_path = "documents/"
def icon
@@asset_domain.to_s + @@asset_path.to_s + read_attribute(:icon).to_s
end
end
これは私がサブクラスでやりたいことであり、サブクラスは適切な場所で「アイコン」(またはその他のアセット) を探します。
class Tutorial < Document
attr_accessible :title, :body, :icon
@@asset_path = "tutorials/"
# Other tutorial-only stuff
end
クラス変数について読んで、上で書いたことが意図したとおりに機能しなかった理由を理解しましたが、Tutorial クラスで「asset_path」をオーバーライドする最良の方法は何ですか? モデルのインスタンスごとに値を変更する必要がないため、インスタンス変数を使用する必要はないと思います。どんなアイデアでも大歓迎です (たとえそれが再考を意味するとしても!)