rails model其中boolean值

时间:2013-12-13 04:03:08

标签: ruby-on-rails ruby

这是我检查布尔值的代码(我正在使用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检查布尔值?

1 个答案:

答案 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联接表。点是,当您的查询开始失控时,将不同的子句提取到范围中。它将使代码更具可读性,灵活性和可测试性。

**可能需要稍微调整一下,如果您决定走这条路并且有任何问题请告诉我**