2015-06-10 9 views
1

Я пытаюсь классифицировать, являются ли твиты геодезическими на основе определенных ключевых слов с использованием Ruby Twitter Gem. Я могу сделать это просто отлично от консоли рельсов, но я пошел, чтобы отразить мои результаты в представлении, и я просто не знаю, как это сделать.Где в проекте Rails Project для создания кода

Вот что я делаю в командной строке:

Я начинаю с создания моего потокового клиента:

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 и введите «geo» или «count» в консоли.

В идеальном мире у меня будет представление, в котором будут отображаться числа и геоданные. Когда я обновляю представление, указанное представление будет обновляться обновленными номерами.

Я попытался выбросить это в контроллер, но тогда страница никогда не загружается, потому что, по-видимому, контроллер бесконечно разбирает поток и никогда не получает возможность визуализации.

Я застрял в файле модели, но это тоже ничего не делало.

Итак, я об этом совершенно неправильно? Получает ли эти цифры невозможным нигде, кроме IRB?

ответ

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 операция может производить десять результатов в короткий период времени.

+0

Это хорошая информация, особенно то, что точно можно показать в представлении (вызов db, хелпер, переменная экземпляра). Тем не менее, я хочу постоянно запускать поток в фоновом режиме и получать обновленные подсчеты всякий раз, когда я обновляю представление. Это делает меня тем, что контроллер не должен быть тем, кто управляет потоком, но я все еще теряюсь за этим. – StephenMcMurtry

+0

Нет ничего плохого в том, что контроллер напрямую управляет потоком, но он должен убедиться, что поток не работает навсегда. Если вы используете [этот модуль] (https://github.com/tweetstream/tweetstream), то это похоже на EventMachine и не может прекрасно воспроизводиться внутри вашего приложения Rails.Стандартный шаблон, который здесь применяется, состоит в том, чтобы иметь сценарий опроса, который пишет вещи в базу данных, и контроллер извлекает эти вещи для отображения. ActiveRecord делает это довольно легко. – tadman