Приложение Rails 4 для интеграции с Twitter

Я пытаюсь интегрировать твиттер-канал в свое приложение Rails 4, используя этот gem.

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

У меня есть следующее в файле инициализатора с именем twitter_init.rb (с моей информацией для аутентификации):

client = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

При попытке использовать следующий код, на мой взгляд, я получаю сообщение об ошибке undefined local variable or method 'client' for class#<#<class...>:...>:

<% client.sample do |tweet| %>
   <%= tweet.text %>
 <% end %>

Есть ли еще один шаг для раскрытия клиентской переменной или, может быть, я неправильно ее инициализировал?


person Snarf    schedule 27.09.2013    source источник


Ответы (1)


Когда вы устанавливаете клиент для Twitter::Streaming::Client.new в своем инициирующем файле, вы создаете локальную переменную. Эта переменная потеряла область действия и уже давно исчезла к тому времени, когда вы доберетесь до своего представления.

Чтобы все заработало, удалите twitter_init.rb

Затем в выполняемом действии контроллера

@client = Twitter::Streaming::Client.new do |config|
  config.consumer_key        = "YOUR_CONSUMER_KEY"
  config.consumer_secret     = "YOUR_CONSUMER_SECRET"
  config.access_token        = "YOUR_ACCESS_TOKEN"
  config.access_token_secret = "YOUR_ACCESS_SECRET"
end

Затем в представлении

<% @client.sample do |tweet| %>
  <%= tweet.text %>
<% end %>

Обратите внимание на символы @.

Однако это нарушает соглашение толстой модели тощего контроллера и должно быть инициализировано в другом месте, например, в службе.

person Tyrel Richey    schedule 28.09.2013
comment
Это работает, но вы когда-нибудь разобрались, как заставить его работать, если этого конфига нет в контроллере? Спасибо - person brad; 21.01.2014