首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Rails中有效地获取代理in

如何在Rails中有效地获取代理in
EN

Stack Overflow用户
提问于 2014-11-21 17:25:26
回答 2查看 28关注 0票数 0

检查以下部分是与模型相关的部分:

代码语言:javascript
运行
复制
ALL_STATUS = ['approved', 'pending', 'processing', 'declined', 'rejected']

#agent.rb
has_many :reports 
has_many :assessments, through: :reports

#report.rb
has_many :assessments 
belongs_to :agent

#assessment.rb
belongs_to :agent

Those are my sample records in DB.
#agent
id  name 
1  Alex
2  Justin
3  Clark
4  Mike

#reports
id  agent_id   status 
1     1        approved
2     1         pending
3     1         processing
4     1        rejected

#assessment
id report_id agent_id  status 
1    1          1       approved
2    3          1       processing
3    2          1       pending
4    4          1       rejected

经社部:

  • 一旦我们创建报告,这些报告将被转换为评估记录。
    1. 在这里,agent#Alex提交的报告(user_id: 1)已经添加以供评估。
    2. 我想找出那些还没有添加所有评估的用户I/拒绝那些已经将其报告添加到评估列表中的user_ids?
    3. 因此这里的输出仅为2,3,4。(这些ids可能有报告记录,但可能没有任何评估)

我正在使用下面的代码来获取代理ids。

代码语言:javascript
运行
复制
eligible_agents = []
result = Agent.joins(:reports, :assessments)
  result.each do |agent|
    if(agent.reports.pluck(:status).count !=agent.assessments.pluck(:status).count)
      eligible_agents.push agent.id
    end
  end

在这里,问题是显而易见的,如果报告/评估的数量增加,那么在条件内查询是否会多次运行。

我们在这里有什么更好的解决方案?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-11-21 21:16:32

以下内容将返回任何没有评估的代理:

代码语言:javascript
运行
复制
Agent.where.not(id: Assessment.all.pluck(:agent_id))

这就是你要找的吗?

如果只需要代理If:

代码语言:javascript
运行
复制
Agent.where.not(id: Assessment.all.pluck(:agent_id)).pluck(:id)
票数 0
EN

Stack Overflow用户

发布于 2014-11-21 19:58:08

与其通过Agent,不如获取所有没有相关评估的报告。然后从名单上拿起agent_ids。我认为joins在默认情况下会执行内部连接,因此您需要指定左联接条件,并过滤缺少评估的内容。然后你就可以pluck(:agent_id)了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27066964

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档