【问题标题】:trying to save tweets into a model试图将推文保存到模型中
【发布时间】:2015-03-17 23:32:52
【问题描述】:

所以我觉得我已经掌握了这个拼图但无法解决难题。

所以我有一个用户模型,它可以遵循多个关键字(查询)。关联是这样的:

用户

 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

现在我的代码有一个问题,那就是关键字是一个数组。我想要它做的是一次搜索一个数组。

然后我想将它保存到警报表中。我有列“tweet_id”和“owner_id”以及“campaign_id”。

理想情况下,我有一个每 15 分钟执行一次的 cron 作业。

我不知道从哪里开始。有什么想法吗?

【问题讨论】:

  • 所以你的第一个问题是你有一个数组,你想搜索它的每一项,对吧?
  • 是的,所以我的数组有 4 个元素。我想从每个查询中获取 5 个查询。总计 20
  • 我不确定我是否理解:您的twitter.search 方法返回什么?
  • 它返回一条与指定查询匹配的推文。以下是文档:rubydoc.info/gems/twitter/Twitter/REST/Search

标签: ruby-on-rails twitter


【解决方案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 意味着“对每个值采取一些行动”。

这有帮助吗?

【讨论】:

  • 得分!现在我正在正确地检索它们。现在我想做的是将它们保存到名为 Alerts 的模型中。 Campaign_id 最终在哪里也是正确的。
  • 它们是用户独有的。这就是为什么我在考虑是否可以获取我正在经历的关键字的 id,并将其保存为最佳的campaign_id
  • 我真的在问用户是否可以使用相同的关键字创建多个广告系列。无论如何,我会稍微修改一下我的答案。
  • 不能。感谢您到目前为止的帮助关于创建部分的任何想法?
  • @sja 不要忘记接受这个作为您问题的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
  • 1970-01-01
  • 1970-01-01
  • 2019-05-11
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多