在此示例中,我尝试获取由特定类型的用户创建的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
。* FROMworkouts
WHERE((user_id = 29)OR(user_id = 2,5,29)OR( user_id = 2)) ActiveRecord :: StatementInvalid:Mysql2 :: Error:操作数应包含1列:SELECTworkouts
。* FROMworkouts
WHERE((user_id = 29)OR(user_id = 2,5,29)或(user_id = 2))
如果是这种情况,我如何迭代user_id = 2,5,29(除了.each)并拉出由这组特定用户创建的所有训练?
答案 0 :(得分:2)
尝试此where
查询,该查询将查看user_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)