2011-09-09 3 views
1

私はRuby on Rails 3.0.10とを使用しています。ActiveRecord::Relation "エンティティ"を2つ「減算」し、もう一度ActiveRecord::Relationを返したいと思います。 、ActiveRecord ::関係のトラブル

@unchecked_articles = @articles - @articles_checked 

# $ @unchecked_articles.class 
# => Array 

@unchecked_articles.method_call 
# raise a NoMethodError error (read above for more information). 

上記のコード、とにかく、ルビーArrayので、私は「再生」することはできませんを返します(使用whereorder ..:それは、私が2つのActiveRecord::Relationオブジェクト(@articles@articles_checked)、次のコードを持っている、です私は通常、ActiveRecord::Relationと同じようにそれを使っています。私は上記の変更を行った後、私はActiveRecord::Relationオブジェクトを取得するにはどうすればよい

NoMethodError (undefined method 'method_call' for #<Array:0x000001063dd658>) 

:コンソールでは、次のエラーが発生しますか?それ以上の場合、@unchecked_articlesで取得しようとしているものを達成する方法がありますか?

答えて

0

私はあなたのモデルがどのように見えるかはわかりませんが、記事のスコープを定義することをお勧めします。

Article < ActiveRecord::Base 
    scope :unchecked, where(:checked => false) 

    #or this, apologies for somewhat unefficient, but you already seem to have several queries 
    scope :unchecked2, lambda { |checked| where(["id not in (?)", checked.map(&:id)]) } 

end 

Article.unchecked 
Article.unchecked2(@unchecked_articles) 
2

scopeを使用してください。

scope :unchecked, where("checked is FALSE") 

私はあなたがこのようなチェック記事にフラグを立てることを前提にしています。スコープを定義したら、Article.uncheckedと呼んで、チェックされていない記事のARを得ることができます。