【问题标题】:Rails 3 - Create a scope that takes advantage of a methodRails 3 - 创建一个利用方法的范围
【发布时间】:2012-06-18 21:52:37
【问题描述】:

在我的模型中,我想创建一个利用方法的作用域,该方法也在我的模型中。

我有以下模型方法:

  def is_paired
    ! pairing_id.nil?
  end

我想做一个看起来像这样的范围

  scope :paired, where(:is_paired => true)

但是当我这样做时,我得到一个错误:

SQLite3::SQLException: no such column: participants.is_paired: SELECT "participants".* F...

如何在我的模型中创建一个利用方法的作用域???

【问题讨论】:

  • 下面的代码与作用域类似。但是,它返回一个 Array 而不是 ActiveRecord::Relation。 def self.paired self.all.find_all{|item| item.is_paired} 结束

标签: ruby-on-rails ruby-on-rails-3 named-scope


【解决方案1】:

你不能。基本上是在whereorder 等范围内使用的方法。被“翻译”为 sql 查询。 Rails 不知道如何将自定义方法转换为 sql 查询。 无论如何,您可以使用以下方法:scope :paired, where('pairing_id IS NOT NULL') 更多详情可以查看:Rails where condition using NOT NULL

【讨论】:

  • 谢谢...您的回答让我明白了。
猜你喜欢
  • 2011-08-19
  • 2012-02-18
  • 1970-01-01
  • 2011-11-28
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多