怎么说在活动记录查询中'不在'

时间:2011-01-06 01:47:33

标签: activerecord ruby-on-rails-3

嘿,我希望你能帮助我,

@courses = Course.where(:id!= current_user.courses)

我想获得当前用户未注册的课程

@courses = Course.where(:id => current_user.courses)为我提供了用户注册的课程。但我想要相反的

协会很好。我可以使用current_user.courses或current_user.assignments。

2 个答案:

答案 0 :(得分:6)

你可能需要这样的东西:

@courses = Course.where("id NOT IN (?)", current_user.courses)

您不能使用纯数组或散列条件的原因是因为您否定(“NOT IN”)查询。据我所知,如果不使用基于字符串的语法,就无法做到这一点。如果您只想查找匹配(“IN”)项,则可以使用哈希表单:

@courses = Course.where(:id => current_user.courses)

否定(“NOT IN”)部分使其变得棘手。

更多信息可在Active Record Query Interface Guide

中找到

答案 1 :(得分:1)

如果您希望避免使用原始字符串,可以使用ARel

@courses = Course.where(Course.arel_table[:id].not_in(current_users.courses))

不幸的是,ARel没有很好地记录。我使用this作为参考。