2011-06-24 8 views
2

私はRuby on Rails 3.0.7を使用しています。新しいActiveRecord::Relationを初期化して、クラスオブジェクト(同じ "タイプ"のすべてのオブジェクト)を自分自身に取り込む可能性があります。 )<<メソッドを使用します。そうでなければ(自分のニーズに合わせて)新しいRuby arrayクラスを追加する必要がありますが、配列を使用してActiveRecord::Relationのようにメソッドを実行することはできません(例:whereorderなど)。ActiveRecord :: Relationオブジェクトを使って作業する

Seeing the RoR code私はでこれを見つけた:

def initialize(klass, table) 
    @klass, @table = klass, table 

    @implicit_readonly = nil 
    @loaded   = false 

    SINGLE_VALUE_METHODS.each {|v| instance_variable_set(:"@#{v}_value", nil)} 
    (ASSOCIATION_METHODS + MULTI_VALUE_METHODS).each {|v| instance_variable_set(:"@#{v}_values", [])} 
    @extensions = [] 
end 

が、私はそれについての良い文書を発見していません。

ActiveRecord::Relationを初期化するにはどうすればよいですか? 「カスタム」ActiveRecord::Relationオブジェクトで直接作業するのは一般的なプラクティスですか?何について助言していますか?

P.S:私はクラスオブジェクト(<<を使用)を追加したとのすべての操作の最後に、私はその関連replaceメソッドを使用する必要がある、ので、多分私はAssociationCollectionを使用する必要があります。

+0

なぜこのモデルを定義しないのですか? – nzifnab

答えて

0

私はあなたの要件を理解していません。アプリケーションの要件については、初期化を上書きすることはあまり知られていません。 APIはかなり強力で、通常はARELメソッドを上書きする必要はありません。

ベース関係を得るにはMyModel.scopedのようなものを使用できますか? 2つのコレクションを探していますか(DBから1つ、あらかじめ用意されています)?コメントに基づいて

: MyModel.scopedは基本関係を与えるだろう - あなたができる:

pre_prepared_items = [item1, item2, item3] 
my_items = MyModel.where("x = z").order("a ASC") 
@mixed_items = pre_prepared_items + my_items 

か、2つの異なるコレクションを調製し得るし、それに応じてそれらを表示するビュー次第だろうが。

@pre_prepared_items = [item1, item2, item3] 
@my_items = MyModel.where("x = z").order("a ASC) 
+0

"ベースリレーションを取得するためにMyModel.scopedのようなものを使用できますか?"はい、私はその範囲が私が目指すところで達成すればできます。 - 「2つのコレクションを探していますか(DBから1つ、あらかじめ準備しています)? - はい、そうです。 – user502052

関連する問題