如何使用AND& amp;写Rails中的子句条件或运营商

时间:2013-09-09 20:58:55

标签: ruby-on-rails-3

def self.get_previous_feedback current_feedback
    Feedback.where("feedbacks.id < ?", current_feedback.id).order('created_at asc').last
end

def self.get_next_feedback current_feedback
    Feedback.where("feedbacks.id > ?", current_feedback.id).order('created_at asc').first
end
#current_feeedback is the show page of any feedback.( feedback/show/id=2)
  1. 我的数据库中有3个表。反馈,用户,部门以一对多关系连接。

  2. 通过运行以上代码,我可以导航到下一个/上一个反馈。

  3. 我的用户(current_user)已登录,现在点击上一个/下一个,我想从DB(上面写的条件)+的feedback.department_id = current_user.deparment_id中检索下一个反馈。

  4. 包含需要编写AND语句的department_id。怎么做?

3 个答案:

答案 0 :(得分:0)

试试这个......

def self.get_previous_feedback(current_feedback,current_user)
    Feedback.where("id < ? & department_id = ?", current_feedback.id, current_user.department_id).order('created_at asc').last
end

def self.get_next_feedback(current_feedback,current_user)
    Feedback.where("id > ? & department_id = ?", current_feedback.id, current_user.department_id).order('created_at asc').first
end

答案 1 :(得分:0)

感谢您指出正确的逻辑。 以上查询需要进行位修改才能正常工作。

  1. 只是id没有链接到反馈表,因此必须使用feedbacks.id
  2. &安培;需要用AND代替。
  3. 更正代码:

    Feedback.where(“feedbacks.id&lt;?AND feedbacks.department_id =?”,     current_feedback.id,current_user.department_id).order('created_at     ASC')。最后

  4. 谢谢你! :)

答案 2 :(得分:0)

您也可以链接这两个条件,这样您就不需要使用AND,也可以重复使用department_id子句。

def self.get_department_feedback current_user
    Feedback.where(department_id: current_user.deparment_id)
end

def self.get_previous_feedback(current_feedback,current_user)
    get_deparment_feedback(current_user).where("feedbacks.id < ?", current_feedback.id).order('created_at asc').last
end

def self.get_next_feedback(current_feedback,current_user)
    get_deparment_feedback(current_user).where("feedbacks.id > ?", current_feedback.id).order('created_at asc').first
end