pry(main)> Loan.joins(:statistics).where(state: <some states>).where.not(statistics: {state: <some other states>}).order(created_at: "desc").last.statistics.map(&:state)

2015-09-21 20:53:54,423|65310|DEBUG|development| -   Loan Load (0.9ms)  SELECT  `loans`.* FROM `loans` INNER JOIN `statistics` ON `statistics`.`loan_id` = `loans`.`id` WHERE `loans`.`state` IN ('started', 'pending_declined') AND (`statistics`.`state` NOT IN ('prequalified', 'conditionally_approved', '4506t_results_uploaded', 'customer_forms_uploaded', 'ready_for_etran', 'etran_verified', 'forms_to_be_verified', 'forms_verified', 'credit_memo_entered', 'loandoc_generated', 'loandoc_completed', 'loandoc_customer_received_need_signatures', 'signatures_checked_and_uploaded', 'boarded'))  ORDER BY `loans`.`created_at` ASC LIMIT 1
2015-09-21 20:53:54,426|65310|DEBUG|development| -   Statistic Load (0.3ms)  SELECT DISTINCT `statistics`.* FROM `statistics` WHERE `statistics`.`loan_id` = 97
=> ["started", "prequalified", "conditionally_approved", "customer_forms_uploaded", "ready_for_etran", "pending_declined"]


所以,也许我不明白这里发生了什么...我要SQL向我找一些其统计信息中不包含某些值的贷款。在此示例中,我要说的是剔除统计为prequalified的所有贷款,但是,如您从打印输出中可以看到的那样,Loan#statistics确实具有prequalified以及我想要的其他多个州喜欢离开。

谁能对此有所启发?我已经战斗了几个小时,此时我的头在旋转。

最佳答案

使用该ActiveRecord查询,您可以:


一,找到一套贷款
接下来,由created_at排序
然后,最后使用它来找到1个结果的极限,找到集合中最旧的


因此,您有一个Loan实例。

自从您在方法上调用#statistics以来,我可以推断出贷款has_many :statistics,您已经找到了所有具有与找到的Loan实例匹配的外键值的统计信息。现在您有了一组统计信息。

对于统计信息集,您已将它们映射到map属性。

由于您已经加入了统计信息,请尝试从查询中删除.last.statistics。用户将结果集映射到其状态。另外,请考虑使用#includes或#select。

关于mysql - Rails 4在哪里,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32708154/

10-16 01:12