这是我检查布尔值的代码(我正在使用sqlite)
Swimming::Classstudent.where("swimming_classtimes.date >= ? and student_id = ? and deleted = 'f'",current_date,student_id)
显然它看起来很难看。
我试过
Swimming::Classstudent.where("swimming_classtimes.date >= ? and student_id = ? and deleted = 0 ",current_date,student_id)
和
Swimming::Classstudent.where("swimming_classtimes.date >= ? and student_id = ? and deleted = false ",current_date,student_id)
他们都不工作。是否有更好的方法可以在rails中使用where
检查布尔值?
答案 0 :(得分:3)
我的建议是将您的查询细分为可重复使用的范围。下面的代码适用于Rails 4。
class Classstudent
scope :after_or_on, -> (date) { where("swimming_classtimes.date >= ?", date) }
scope :for_student, -> (id) { where(student_id: id) }
scope :active, -> { where(deleted: false) }
end
用法:
Swimming::Classstudent.after_or_on(current_date).for_student(student_id).active
这是值得怀疑的,因为我真的没有在你面前申请。就个人而言,我不喜欢swimming_classtimes
范围内的after_or_on
联接表。点是,当您的查询开始失控时,将不同的子句提取到范围中。它将使代码更具可读性,灵活性和可测试性。
**可能需要稍微调整一下,如果您决定走这条路并且有任何问题请告诉我**