我正在尝试在我的Rails 4应用程序中编写一个多条件范围。
class Receipt
# Scope to only get Receipt objects that need to be sent out.
def self.needs_send_receipts
where(sent_receipt: false) && company.employees.size > 0 && company.teams.first.action_items.size >= 15
end
end
这不起作用,我想弄清楚为什么,如果它评估为真并返回信息。
答案 0 :(得分:0)
以下是我提出的问题(警告:大量使用scope
):
将范围添加到Team
模型,该模型选择至少包含15 action_items
且限制为1的对象:
class Team
# company.teams.first.action_items.size >= 15
scope :some_action_items, lambda {
joins(:action_items)
.group('teams.id')
.having('COUNT(action_items.id >= 15').limit(1)
}
end
向Company
模型添加范围,选择至少有一个关联employee
的对象:
class Company
# company.employees.size > 0
scope :with_employees, -> { joins(:employees) }
end
最后,在Receipt
模型中使用这些范围,通过merge
范围考虑所有上述条件来查询receipts
:
class Receipt
# where(sent_receipt: false)
scope :receipt_not_sent, -> { where(sent_receipt: false) }
# Scope to only get Receipt objects that need to be sent out
scope :needs_send_receipts, lambda {
receipt_not_sent
.joins(company: [:employees, teams: :action_items])
.merge(Company.with_employees)
.merge(Team.some_action_items)
}
end
我希望您意识到我甚至没有机会测试它,所以如果出现任何错别字/错误/等等,请不要发表评论
我的错误是
you have mistyped a single letter
您的解决方案 没有工作atata
但只是尝试按照这个想法,你会弄清楚:)