我有一个非常笨拙的查询,我试图优化。我想基于一些成员资格包逻辑返回用户记录的activerecord关联。
if (str.charAt(i) == ' ' && ((i+1) < str.length()) && str.charAt(i+1)!=' ')
我遇到的问题是我必须进行两次查询,因为我不知道如何使用select来返回活动记录关联而不是数组。
编辑:
经过一些重构后,我能够将一些选择逻辑移动到方法中:
```
ids = User.joins(:memberships).includes(:memberships).select do |user|
if user.memberships.count <= 1
user.membership_packet_sent_at.blank?
else
user.membership_packet_sent_at.blank? && user.current_membership.created_more_than_30_days_ago?
end
end.uniq.map(&:id)
User.where(id: ids)
```
仍然遇到如何返回activerecord关联的问题
答案 0 :(得分:1)
我认为目前无法在应用Relation
后直接返回select
个对象。
这些是我能想到的主要原因:
Relation
对象只是一个SQL构建器,不能与实际数据一起使用select
方法允许执行无法表示为有效SQL查询的自定义进程,因此无法将select
的结果与where
之类的查询链接起来{ {1}} This answer也提出了类似的思路。