定位数组语法中的每个对象

时间:2010-07-12 20:44:48

标签: ruby-on-rails ruby

当天的新问题:

我正在尝试选择具有此条件的所有用户,然后对每个用户执行操作:

User.find(:all).select { |u| u.organizations.count > 0} do |user|

除此之外,这不是正确的方法。不完全确定正确的语法是什么。

任何红宝石家伙都会提供新手吗?

2 个答案:

答案 0 :(得分:2)

要对集合的每个元素执行操作,请使用each方法,如下所示:

User.find(:all).select { |u| u.organizations.count > 0}.each do |user|

答案 1 :(得分:2)

您可能最好将select折叠到查询中:

User.find(:all, :conditions => "organization_id IS NOT NULL").each do |user|

这只会从数据库中获取相关结果,因此应该检索并丢弃不必要的数据。

修改 正如评论中所建议的那样,假设一个称为成员资格的联接模型(用户has_many :organisations, :through => :membership)...

,以下对于多对多关系是正确的。
User.all(:joins => "inner join memberships on memberships.user_id = users.id")