2017-02-05 1 views
0

나는 Yelp API에 연결된 레일 앱을 만들고 있습니다.레일 - 조회수에 API 응답을 표시하는 방법은 무엇입니까?

내가 레일 콘솔에이 시도
def scrape 
    @results = Yelp.client.search(params[:location], {limit: 5, category_filter: "dessert"}) 
    ... 
    redirect_to :posts 
    end 

, 나는 그것이 작동하는지 확인할 수 있습니다 나는 scrape 방법을 만들었습니다.

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'이됩니다. 컨트롤러와 상호 작용할 수 있도록 폼 그룹을 설치하는 방법이며 필자가 검색 단추를 눌렀을 때 yelp를 쿼리하지 않는다는 느낌이 들었습니다.

어떻게 이러한 API 호출의 결과를 저장하고 뷰에 결과를 표시 할 수 있습니까?

이것은 Rails 질문에 더 가깝습니다. 반드시 Yelp를 사용해 볼 필요는 없습니다. Yelp.client.search('Some City', ...)이 호출되면 Yelp는 'Some City'에 레스토랑 목록을 보내 응답합니다.

답변

1

scrape 조치가 게시물 색인 작업으로 리디렉션되는 것처럼 보입니다.이 경우 scrape 작업에서 설정하는 변수 @result은 무시됩니다. 이 문제를 해결하는 한 가지 방법은 render :posts으로 리디렉션을 변경하는 것입니다.이 경우 @results 변수를 소식 색인보기에 사용할 수 있어야합니다.

+0

고마워요! 어떻게 든'render : posts'하지만': index'는 효과가 없었습니다. 그러나, 당신은 나를 올바른 방향으로 이끌었습니다! 괜찮 으면 - 후속 질문 하나를 물어봐도 될까요? 내 코드의 문제는'@ results'가 실행되었다고 말하는 것이 옳은가,'redirection'이 실행되고'@ results'가보기에 도달하기 전에 코드를 완료 했으므로 어떤 값도 표시하지 않는 이유가 무엇입니까? 그렇지 않은 경우 위 코드에 대한 설명 이외에 이전에 코드가 작동하지 않은 이유에 대해 더 자세히 설명해 주시겠습니까? – Iggy

+0

맞아요 - 리다이렉트하는 것이 흐름을 완전히 새로운 컨트롤러로 넘겨 준 것 같아요. 이전에 설정 한 인스턴스 변수를 날려 버리는 것을 이해합니다. 리다이렉션 후보기에서 사용할 수있는 인스턴스 변수는 리다이렉션 된 새 액션에서 설정된 인스턴스 변수뿐입니다. –

관련 문제