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