命名范围语法

时间:2011-03-27 16:48:40

标签: ruby-on-rails ruby scope

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

我正在尝试创建一个范围,其中范围在数组中搜索特定的整数,例如:

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

我哪里出错?

2 个答案:

答案 0 :(得分:1)

你不能在期望SQL的地方使用Ruby。 where子句的参数应该可以在SQL中使用,例如文字字符串,带占位符的数组或带有列值对的散列。

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

答案 1 :(得分:1)

您可以添加以下方法:

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

UPD

只要你需要scope,我的方法就不是你需要的。所以你可以这样做(Ruby方式)

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

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