Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 具有命名_作用域的加法链接_Ruby On Rails_Activerecord_Named Scope - Fatal编程技术网

Ruby on rails 具有命名_作用域的加法链接

Ruby on rails 具有命名_作用域的加法链接,ruby-on-rails,activerecord,named-scope,Ruby On Rails,Activerecord,Named Scope,有没有一种方法可以以相加的方式组合作用域 如果我有望远镜 User.big_haired 及 我可以打电话 User.big_haired.plays_guitar 让所有留着大头发、会弹吉他的用户参与进来。我可以写这篇文章来吸引所有留着大头发或弹吉他的用户吗 我想我必须补充一点,我意识到您可以运行一组查询并将结果添加到一起。这就是我不想做的事。所以你有: class User < ActiveRecord::Base named_scope :big_haired, :condi

有没有一种方法可以以相加的方式组合作用域

如果我有望远镜

User.big_haired

我可以打电话

User.big_haired.plays_guitar
让所有留着大头发、会弹吉他的用户参与进来。我可以写这篇文章来吸引所有留着大头发或弹吉他的用户吗

我想我必须补充一点,我意识到您可以运行一组查询并将结果添加到一起。这就是我不想做的事。

所以你有:

class User < ActiveRecord::Base
  named_scope :big_haired, :conditions => {:hair => 'massive'}
  named_scope :plays_guitar, :conditions => {:plays => 'guitar'}
end

我只是在一些定义了_作用域的模型上进行了尝试。如果您将其组合,它将把这些条件作为AND条件组合在一起。所以

User.big_haired.plays_guitar
将导致(显然是我的速记SQL,而不是真正的rails生成的东西)

我不知道有什么方法可以把它们结合起来作为一种关系。当你考虑各种选择时,这将是难以置信的复杂。我们一直在链接命名为_的范围,它工作得很好(只要您希望它们结合在一起)

要执行and case,我将创建一个具有OR条件的特殊命名范围,或者使用union生成一个唯一的集合,如下所示:

User.big_haired | User.plays_guitar

试试Searchlogic,它最近很流行

User.big_haired.plays_guitar
SELECT * FROM users WHERE hair = 'massive' AND plays = 'guitar'
User.big_haired | User.plays_guitar