Ruby on rails ActiveRecord::关系问题

Ruby on rails ActiveRecord::关系问题,ruby-on-rails,ruby,arrays,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby,Arrays,Ruby On Rails 3,Activerecord,我使用的是RubyonRails 3.0.10,我想“减去”两个ActiveRecord::Relation“实体”,然后再返回一个ActiveRecord::Relation。也就是说,我有两个ActiveRecord::Relation对象(@articles和@articles\u checked)和以下代码: @unchecked_articles = @articles - @articles_checked # $ @unchecked_articles.class # =>

我使用的是RubyonRails 3.0.10,我想“减去”两个
ActiveRecord::Relation
“实体”,然后再返回一个
ActiveRecord::Relation
。也就是说,我有两个
ActiveRecord::Relation
对象(
@articles
@articles\u checked
)和以下代码:

@unchecked_articles = @articles - @articles_checked

# $  @unchecked_articles.class
# => Array

@unchecked_articles.method_call
# raise a NoMethodError error (read above for more information).
无论如何,上面的代码返回一个Ruby
数组
,因此我不能再像通常使用
ActiveRecord::Relation
那样使用它“播放”(使用
where
order
,…语句)。在控制台中,它生成以下错误:

NoMethodError (undefined method 'method_call' for #<Array:0x000001063dd658>)
NoMethodError(未定义的方法'method#u call')

在我做了上述更改之后,如何检索
ActiveRecord::Relation
对象?
或者更好,有一种方法可以实现我使用
@unchecked_articles
检索的目标。

我不知道您的模型看起来如何,但我建议为文章定义一个范围

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)
Articlefalse)
#对此,我为一些不充分表示歉意,但您似乎已经有了一些疑问
作用域:未选中2,lambda{| checked | where([“id不在(?”,checked.map(&:id)])
结束
第条未经检查
第2条未勾选(@unchecked_articles)

使用
范围

scope :unchecked, where("checked is FALSE")
我假设你会标记这样的检查过的文章。定义范围后,您可以调用
Article.unchecked
,以获得未选中文章的AR

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)