class Event
has_many :keywords, :through => :event_keywords
end
class User
has_many :keywords, :through => :user_keywords
end
我有一个User方法,根据与特定用户共享的关键字计算事件的相关性:
User.rb
def calculate_event_relevance(event_id)
event_keywords = event.keywords
event_keywords.each do |kw|
user_keyword_match = self.keywords.where(id: kw.id).first
if user_keyword_match
## do some stuff
end
end
end
现在,我正在遍历每个关键字。在循环中,我进行查询以查看用户是否也有该关键字。
有没有办法让一个查询(并将其保存到event_keywords)只返回用户也拥有的event.keywords
,这样我就不需要遍历所有查询了?
是否有查询可以找到用户和事件的共同关键字?
答案 0 :(得分:1)
假设event_keywords
和user_keywords
都是数组,您可以使用数组上的&
来获取两者中存在的值。
例如,
[1,2,3,4,5,9] & [5,6,7,8,9] #=> [5, 9]
在这种情况下,两个数组中都存在5和9,因此返回它们。
在您的情况下,您可以执行类似
的操作share_keywords = event.keywords & self.keywords
返回一个数组,其中包含在event和user之间共享的所有关键字。然后你可以遍历它并做你需要做的事情。