存在Rails范围检查序列化列

时间:2017-09-06 02:59:02

标签: ruby-on-rails ruby scope

我正在学习rails的范围

如果QuestionSet有一个名为questions_list的列,其格式为serialize

喜欢这个

class QuestionSet < ActiveRecord::Base
  serialize :questions_list
end

然后我有一个名为is_order的方法,它很简单。 唯一的用途是检查questions_list是否存在

喜欢这个

def is_order
  self.questions_list.present?
end

我可以把它写入范围吗?或者在这种情况下,它不是合适的范围方案

2 个答案:

答案 0 :(得分:0)

如果您的目标是让范围返回有Question_list的QuestionSet记录,您应该能够定义这样的范围:

scope :with_questions_list, -> { where.not(questions_list: nil) }

然后你可以这样做:

QuestionSet.with_questions_list # This is the same as QuestionSet.all.with_questions_list

如果目标是构建一个为单个对象返回truefalse的方法,那么您正在正确地执行此操作,但我建议进行两项更改:(1 )您不需要引用self(因为在上下文中暗示)和(2)您应该使用Ruby方法在方法的末尾添加问号。

def is_order?
  questions_list.present?
end

答案 1 :(得分:0)

scope在这里是一个错误的选择,因为它始终返回活动记录并且不绑定任何实例对象,scope它是关于集合的。

  

作用域允许您指定可以使用的常用查询   引用为关联对象或模型的方法调用。