如果我有以下内容:
@projects = Permission.where(["user_id >= ?", 21])
结果:
[#<Permission id: 59, project_id: 13, user_id: 21>, #<Permission id: 59, project_id: 13, user_id: 21>]
然后我将使用那些project_id到QUERY的内容如下:
AuditLog.where({ :project_id => @projects }).limit(10)
但是这个错误?
NoMethodError: undefined method `project_id' for [#<Permission id: 59, project_id: 13, user_id: 21>]:ActiveRecord::Relation
想法?谢谢
答案 0 :(得分:1)
首先,让我们清理你的第一个查询:
@permissions = Permission.where(['user_id >= ?', 21])
这对@permissions
实际存储的内容不那么具有误导性。接下来,请记住它是一个数组,你在下一个查询中说的是“其中project_id是一个ruby权限对象的列表”,并且它不会产生有效的查询。
但是,您可以获得所需的信息。首先,使用ruby的array.map
方法遍历所有权限并收集他们的project_id:
@project_ids = @permissions.map(&:project_id)
现在,您可以告诉数据库获取project_id在列表中的所有审计日志:
@audit_logs = AuditLog.where(['project_id in (?)', @project_ids])
那应该给你你需要的东西。如果您有任何问题,请告诉我。