所以我觉得我已经得到了这个的部分,但无法解决这个难题。
所以我有一个User模型,它可以跟随几个关键字(查询)。协会是这样的:
用户
has_many :campaigns #they can add and remove keywords to this association
has_many :alerts, through: campaigns
现在我想要做的是创建一个搜索User.campaigns的方法,将它们保存在警报中。因此,我可以看到哪个查询与哪个关键字相关联(通过campaign_id)。
这就是我所拥有的:
keywords = current_user.campaigns.map(&:keywords)
current_user.twitter.search(keywords, result_type: 'recent').take(5).collect do |tweet|
"#{tweet.id} #{tweet.user.id}"
end
现在我的代码存在问题,即关键字是一个数组。我想要它做的是一次搜索一个数组。
然后我想将它保存到Alert表中。我的列有'tweet_id'和'owner_id'以及'campaign_id'。
理想情况下,我有一个cron工作,每15分钟执行一次。
我不知道从哪里开始。有什么想法吗?
答案 0 :(得分:1)
如果您正在寻找的是如何搜索每个关键字,那么应该这样做: 根据OP
的说明进行编辑current_user.campaigns.each do |campaign|
current_user.twitter.search(campaign.keyword, result_type: 'recent').take(5).map do |tweet|
"#{tweet.id} #{tweet.user.id}"
#new_alert = current_user.alerts.create(campaign: campaign....)
end
end
请注意,可能有一种方法让twitter.search仅返回5个结果,这将使.take调用不必要。
另请注意,我交换了.map和.collect - 它们大部分都是可互换的,但语义上.collect对我来说意味着"检索一些值"和.map意味着"对每个值采取一些行动"。
这有帮助吗?