在Rails项目中放置代码的位置

时间:2015-06-10 19:55:22

标签: ruby-on-rails ruby ruby-on-rails-4 tweetstream

我正在尝试使用Ruby Twitter Gem对基于某些关键字的推文进行地理标记进行分类。我可以从rails控制台上做到这一点,但我在一个视图中反映了我的发现,而我只是不知道该怎么做。

以下是我在命令行上所做的事情:

首先设置我的流媒体客户端:

client = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = "MYCODE"
  config.consumer_secret     = "NOTYOURS"
  config.access_token        = "HANSHOT"
  config.access_token_secret = "FIRST"
end

然后我初始化我的计数:

count = 0
geo = 0

最后我粘贴在我的简短脚本中并运行输入:

client.filter(:track => "cat") do |tweet|
    count += 1

    if(tweet.place.nil?)
      # Do nothing
    else
      geo += 1
    end
end

要访问我的搜索结果,我需要按Ctrl + C并输入“地理位置”。或者'计算'进入控制台。

在理想的世界中,我有一个显示计数和地理位置数的视图。每当我刷新视图时,所述视图都会刷新更新的数字。

我尝试在控制器中抛出它,但是页面永远不会加载,因为可能是控制器无限地解析流并且永远不会有机会渲染。

我把它放在模型文件中,但也没有做任何事情。

那么,我是以完全错误的方式来做这件事的吗?除了IRB以外,除了IRB之外,这些数字是不可能的?

1 个答案:

答案 0 :(得分:0)

在创建控制器代码时,您需要记住以下几点:

  • 您希望在视图中显示的所有内容都必须由数据库调用,帮助程序方法或实例变量提供。
  • 控制器必须及时完成计划执行的任何操作。无限循环和长时间运行需要几分钟才会出现严重问题。
  • 视图可以进行自己的计算,通常它们可以自由运行任意Ruby代码,但由于这是控制器的主要责任,因此被认为是不好的形式,因为这是控制器的主要责任。

一般而言,您的控制器代码可能如下所示:

def index
  @client = Twitter::Streaming::Client.new do |config|
    # ... (Configuration)
  end

  @count = 0
  @geo = 0

  client.filter(track: "cat") do |tweet|
    @count += 1

    if (tweet.place)
      @geo += 1
    end

    break if (@count > 10)
  end
end

这假设client.filter操作可以在短时间内产生十个结果。