Rails - 了解如何在Rails中查询对象3

时间:2010-10-21 03:56:36

标签: ruby-on-rails ruby-on-rails-3

如果我有以下内容:

@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

想法?谢谢

1 个答案:

答案 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])

那应该给你你需要的东西。如果您有任何问题,请告诉我。