【问题标题】:active record query returns hash of user_ids, find user attributes for each活动记录查询返回 user_ids 的哈希,查找每个用户的属性
【发布时间】:2011-07-18 04:06:16
【问题描述】:

用户有很多关系

在我的关系表中,我有一个字段 :referee,其中包含每条记录的 user_id。 每条记录还有user_id外键

我想在 :referee 字段中找到具有 current_user.id 的记录,并从每个记录的外键字段中选择 user_id。

refs = Relationship.where(:referee => current_user.id).select("user_id").all 

这会产生一个这样的数组,

[#<Relationship user_id: 16>, #<Relationship user_id: 17>]

我现在想为数组中的每个 id 查找 User 属性,我已经尝试过但到目前为止失败了,例如:

User.where(:id => @refs_user_id).each do |user|
  user.name
end

对活动记录高级查询、范围等进行了一些阅读/观看,但似乎不太了解这里需要什么。任何建议将不胜感激,谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord find


    【解决方案1】:

    您可以将一组 id 传递给 ActiveRecord

     User.find([1,2,3,4,5,6])
    

    如果你只是想获取 ID:

         User.find(:all, :conditions => 'id IN (?)',[1,2,3,4,5,6], :select => 'id')
    

    这只会返回 ID。

    【讨论】:

    • 谢谢@codeglot,我的查询中返回的数组似乎是问题所在 - 我如何返回一个只包含 id 号的数组?
    【解决方案2】:

    您可以像这样只选择user_id 组件:

    User.where(:id => @refs_user_id.map(&:user_id)).each do |user|
      user.name
    end
    

    【讨论】:

    • 感谢您,但在评估 nil.map 时发生了 nil 对象错误?
    • 我假设@refs_user_id 持有您的Relationship.where(...) 查询的结果。如果真的是refs,那就用refs.map(&amp;:user_id)
    • 感谢 Dylan,我对活动记录查询的理解非常基础。这是进行此类查询的正确方法吗?
    • User.find(@refs_user_id.map(&amp;:user_id)) 短一点 ;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多