我正在学习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
我可以把它写入范围吗?或者在这种情况下,它不是合适的范围方案
答案 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
如果目标是构建一个为单个对象返回true
或false
的方法,那么您正在正确地执行此操作,但我建议进行两项更改:(1 )您不需要引用self
(因为在上下文中暗示)和(2)您应该使用Ruby方法在方法的末尾添加问号。
def is_order?
questions_list.present?
end
答案 1 :(得分:0)
scope
在这里是一个错误的选择,因为它始终返回活动记录并且不绑定任何实例对象,scope
它是关于集合的。
作用域允许您指定可以使用的常用查询 引用为关联对象或模型的方法调用。