我在理解正确的解决方法方面遇到了一些麻烦。
这是我最初的。我认为它工作正常,但问题是:
如果创建的故障单具有跨越不同类别的多个属性,并且用户只订阅了其中一个类别,他们将无法收到该电子邮件。他们应该收到一封电子邮件。
示例:
我知道下面的内容很糟糕,因为这只会将最终的property.category.name放入@ticket_category
@ticket.properties.each do |property|
@ticket_category = property.category.name
end
@people_for_email = @sub_emails.select {|user| user["categories"].include?(@ticket_category)}
@emails_for_email = @people_for_email.map {|emails| emails["name"]}
然后我们发送电子邮件
UserNotifier.ticket_created(@emails_for_email).deliver_now
我已尝试将@ticket_category
设置为数组[]
并在块中使用<<
。使用.any?
似乎在这里工作得很好,但是我没有运气很多而没有返回参数错误。知道最好的方法吗?
答案 0 :(得分:1)
您可以使用&
来获取两个数组的交集。如果数组中有任何元素,则present?
将返回true
。如下所示:
@ticket_categories = []
@ticket.properties.each do |property|
@ticket_categories << property.category.name
end
@people_for_email = @sub_emails.select do |user|
intersection = user["categories"] & @ticket_categories
intersection.present?
end
@emails_for_email = @people_for_email.map {|emails| emails["name"]}
(我没有对此进行测试,因此可能存在拼写错误)