Ruby on rails 命名范围语法

Ruby on rails 命名范围语法,ruby-on-rails,ruby,scope,Ruby On Rails,Ruby,Scope,我有以下模型对象:Issue.owner=[array] 我试图创建一个作用域,其中作用域在数组中搜索特定的整数,例如: scope :tagged_in_issue, where("issues.owner.include?(1)", true) 我哪里出错了?在需要SQL的地方,不能使用Ruby。where子句的参数应该是可以在SQL中使用的参数,例如文字字符串、带有占位符的数组或带有列值对的哈希 您需要做的是将查询重新表述为SQLWHERE子句。您可以添加如下方法: class Iss

我有以下模型对象:
Issue.owner=[array]

我试图创建一个作用域,其中作用域在数组中搜索特定的整数,例如:

scope :tagged_in_issue, where("issues.owner.include?(1)", true) 

我哪里出错了?

在需要SQL的地方,不能使用Ruby。
where
子句的参数应该是可以在SQL中使用的参数,例如文字字符串、带有占位符的数组或带有列值对的哈希


您需要做的是将查询重新表述为SQL
WHERE
子句。

您可以添加如下方法:

class Issue < AR::Base
  def tagged_in_issue?(n)
    owner.include?(n)
  end
end

@issue.tagged_in_issue(1)
#=> true
@issue.tagged_in_issue(2)
#=> false

如果您想通过SQL来实现,那么您应该描述什么是
owner
属性,以及它存储在哪里

我有麻烦了。哈哈。那么如何在SQL中搜索一个数组来查找整数1?数组是什么意思?SQL真的没有这些。它确实有结果集。可能您想要的是
问题。其中(:owner\u id=>1)
但如果您使用
序列化列,这将不起作用,因为该列以SQL无法理解的格式存储。您希望owner字段中的任何位置都有“1”还是仅为“1”?所有者是一个与Ruby相关的字段(所有者id)还是一个简单的整数字段(所有者)?作用域:在\u问题中标记了\u,其中(“issues.owner=?”,1)查看此处的“跨模型作用域”部分:。您真正想做的是创建这样的连接。中定义了什么范围?issues表的owner列中的一个值是什么样的?如果它是一个由整数组成的序列化ruby数组,则需要一个特定的查询,如果中间有一个连接模型,则需要一个不同的查询。根据您将遇到的问题的数量,像这样转储整个数据库并循环遍历它们可能会非常低效。@scragz,+1,但是JZ没有告诉我们关于
owner
nature的信息调用
all
,然后
select
将在任何记录数不多的应用程序上被谋杀。这是我们拥有数据的唯一解决方案:)
class Issue < AR::Base
  def self.tagged_in_issue(n)
    all.select{|a| a.owner.include?(n)}
  end
end

Issue.tagged_in_issue(1)
#=> Array of issues