2011-07-01 6 views
1

私はRuby on Rails 3.0.7を使用していますが、どのような動作がほぼ同じ(およびモデルファイル内のコード)のツリークラスを持っています。これらはすべてname属性とdescription属性を持ち、同じ検証方法を実行し、同じ機能を提供するデータを一貫して維持するbefore_saveコールバックがあります。検証メソッドとコールバックのリファクタリング

私は(私は彼らに自分のアプリケーションの\libフォルダ内の関連ファイルを検索するために持っていると思う)、分離クラス\モデルでの検証メソッドとコールバックをリファクタリングしたいと思います。

これを行うには何が必要ですか?私のクラスで追加しなければならないコードと、リファクタリングクラス\モデルの内容は何ですか?

答えて

0

をさて、あなたは自分の三つのモデルが継承するスーパークラスを作ることができます。私は抽象基底クラスをモデル自体と一緒にapp/modelsに配置する傾向があります。

# app/models/thing.rb 
class Thing < ActiveRecord::Base 
    # common code goes here, such as 
    before_save ... 
    validates_length_of :foo 
end 

# app/models/red_thing.rb 
class RedThing < Thing 
    # methods specific to RedThing go here 
end 

# app/models/blue_thing.rb 
class BlueThing < Thing 
    # methods specific to BlueThing go here 
end 

あなたの事は、それがグループのようなそれらに意味を持たないように多くの違いがある場合は、あなただけもう少し複雑である、代わりにモジュールを使用したいと思います。

+0

デイビス - モジュールを使って私に事例を作ることができますか? – Backo

+0

モジュールと似たようなことを試したとき、どんなトラブルに遭遇しましたか? –

0
+0

Paul Groves - これは検証目的のためのもので、コールバックのためのものは何ですか?さらに、私はすべての "リファクタリングされたコード"を分離されたクラス\ modelに保存したいと思います。 – Backo

+0

申し訳ありません。質問を正しく読まないと約束します。( FWIW - @ rob-davisの回答は私にはよく見えますが、別のデータベースから実行された複数のクラスを作成するときに同じことをしました –

+0

Groves - とにかく、ありがとう、とにかく – Backo