Ruby on rails Rails 2.3:如何将此SQL语句转换为命名的\u范围

Ruby on rails Rails 2.3:如何将此SQL语句转换为命名的\u范围,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,在了解如何从此SQL查询创建命名的\u作用域时有点困难: 选择*from foo,其中id不在select foo_id from bar和foo.category=?按兰特限额1订购 类别应该是可变的以进行更改 为上述问题编写命名范围的最有效方法是什么?与其说是答案,不如说是评论,但实际上并不适合 named_scope :scope_name, lambda { |category| { :conditions => ["id NOT IN (select f

在了解如何从此SQL查询创建命名的\u作用域时有点困难:

选择*from foo,其中id不在select foo_id from bar和foo.category=?按兰特限额1订购

类别应该是可变的以进行更改


为上述问题编写命名范围的最有效方法是什么?

与其说是答案,不如说是评论,但实际上并不适合

  named_scope :scope_name, lambda { |category|
    { 
      :conditions => ["id NOT IN (select foo_id from bar) AND foo.category = ?", category],
      :order => 'RAND()',
      :limit => 1
    }
  }
泽德·奥克斯夫很在行

为了简化事物并保持它们的干燥,可以考虑定义离散的命名范围,而不是定义一个大范围,并将它们链接在一起。

例如:

named_scope :random_order, :order => 'RAND()'
named_scope :limit, :lambda => { |limit| :limit => limit }
named_scope :whatever, ...
因此,您将按如下方式使用它们:

Person.random_order.limit(3).whatever