从belongs_to表获取Ruby中的对象集合时出错

时间:2015-03-10 18:01:47

标签: mysql ruby-on-rails ruby

在此示例中,我尝试获取由特定类型的用户创建的Workouts集合(Workout属于特定用户,列名为user_id):current_user,Professional用户(继承自User)和管理员。这就是我现在所拥有的:

Workout.where('(user_id= ?) OR (user_id= ?) OR (user_id= ?)', current_user.id, User.select(&:professional?), User.find_by_admin(true).id)

我相信第二项是抛出这个错误:

  

Mysql2 ::错误:操作数应包含1列:SELECT workouts。* FROM workouts WHERE((user_id = 29)OR(user_id = 2,5,29)OR( user_id = 2))   ActiveRecord :: StatementInvalid:Mysql2 :: Error:操作数应包含1列:SELECT workouts。* FROM workouts WHERE((user_id = 29)OR(user_id = 2,5,29)或(user_id = 2))

如果是这种情况,我如何迭代user_id = 2,5,29(除了.each)并拉出由这组特定用户创建的所有训练?

2 个答案:

答案 0 :(得分:2)

尝试此where查询,该查询将查看user_id匹配

的ID数组
Workout.where(user_id: [current_user.id, User.select(&:professional?), User.find_by_admin(true).id].flatten)

等效的SQL

SELECT * FROM workouts WHERE user_id IN (1,3,6,4,2)

答案 1 :(得分:0)

试试这个

Workout.where(user_id: [current_user, User.select(&:professional), User.find_by_admin(true)]).map(&:id)