2017-02-05 2 views
0

Я создаю приложение для рельсов, которое подключается к Yelp API. Я создал scrape метод:Rails - Как отобразить ответ API на представления?

def scrape 
    @results = Yelp.client.search(params[:location], {limit: 5, category_filter: "dessert"}) 
    ... 
    redirect_to :posts 
    end 

Когда я попробовал это на Rails консоли, я могу подтвердить, что он работал.

results.businesses[0].name 
#=> Super awesome dessert place! #it returns the right response on console 

Но когда я использовал его для просмотра, он ничего не показывает.

<div class="form-group"> 
    <%= form_tag({:controller=>"posts", :action=>"scrape"}, method: :post) do %> 
    <div class="form-group"> 
     <%= text_field_tag :location, nil, class: 'form-control', placeholder: 'Location', style:"width: 50%", :required => true %> 
    </div> 
    <div class="form-group"> 
     <%= submit_tag 'Search!', name: nil, class: 'btn btn-success search-button'%> 
    </div> 
    <% end %> 
</div> 

<div class="center-block"> 
    <% if @results.blank? %> 
    <h3>No result found</h3> 
    <% else %> 
    <% @results.businesses.each do |result| %> 
... 
<%= result.name %> 

Я получаю 'No result found'. У меня такое ощущение, что я настраиваю свою группу форм для взаимодействия с контроллером и что он не запрашивает визг, когда я нажимаю кнопку поиска.

Как я могу сохранить результат такого вызова API и отобразить результат на представлениях?

Это скорее вопрос Rails, вам не обязательно обязательно попробовать Yelp. Когда вызывается Yelp.client.search('Some City', ...), Йелп отвечает, отправив список ресторанов в «Some City».

ответ

1

Похоже, что ваше действие scrape перенаправляется на действие индекса сообщений, и в этом случае переменная @result, которую вы устанавливаете в действии scrape, игнорируется. Одним из способов исправить это было бы изменение перенаправления на render :posts, и в этом случае ваша переменная @results должна быть доступна в представлении индекса сообщений.

+0

Спасибо! Как-то это не сработало, когда я делаю «render: posts», но ': index' работал. Однако вы привели меня в правильное направление! Если вы не возражаете - могу я задать один последующий вопрос? Правильно ли говорить о том, что проблема с моим кодом «@ results» была запущена, но «redirect» работает и завершил код до того, как «@ results» когда-либо достигнет представления, и именно поэтому он не показывает никакого значения? Если нет, не могли бы вы объяснить, что дальше (в дополнение к комментарию выше), почему код не работал раньше? – Iggy

+0

Это звучит правильно - перенаправление передало поток всему новому контроллеру, и, насколько я понимаю, это сдует любые переменные экземпляра, которые вы ранее задали. Единственными переменными экземпляра, доступными вашему представлению после перенаправления, являются те, которые установлены в новом действии, на которое вы перенаправлялись. –

Смежные вопросы