2016-09-15 14 views
1

私のレールアプリのフォームで提供される2つのパラメータ(タグとデバイス)で外部APIからデータ(チュートリアル)を検索する必要があります。私は私のルートでrailsフォームで外部APIを検索し、結果をビューに表示

resources :search_lists, only: [:index] do 
    collection do 
    post :search 
    end 
end 

ここで私は私が私のSearchListsControllerに置くべきだと思うものです:

def index 
    @search_parameter = params[:tags] 
end 

def search 
end 

私は私のコードとどこがすべきを整理する方法をわかりませんAPI呼び出しを渡します。ここで

が私の見解ですが、レールはsearch_lists_urlを認識しません:

<form action="<%= search_lists_url %>"> 
    <input type="text" name="" value="" placeholder="Search by tag"> 
    <label >Filters:</label> 
    <input type="checkbox" value="first_checkbox">Smarthpone 
    <input type="checkbox" value="second_checkbox">Tablet 
    <input type="checkbox" value="third_checkbox">Mac 
    <br> 
    <input type="submit" value="Search"> 
</form> 

誰も私を助けてくださいことはできますか? :)

+0

あなたのAPIコールは、検索アクションで、コントローラに移動します。 –

答えて

0

外部APIの場合、APIコンシューマーはAPIアプリケーションのルートヘルパーを認識しません。より良い方法は、フォームアクションでコンシューマーアプリケーションのコントローラーアクションのURLを呼び出し、このコントローラーアクションでAPI呼び出しを処理することです。あなたのAPIコンシューマアプリケーションの例

あなたのルートでこれを持つことができます。その後、

post "search_lists" => "lists#search", as: :search 

このような検索アクションを使用してcontrollersディレクトリ内lists_controller.rbファイルを持っている:

class ListsController < ApplicationController 
    include HTTParty 

    def search 
    ## make your API Call on this action 
     response = HTTParty.post(your_api_host_url/search_lists/search, {body: [#your form input data##]}) 
    end 
end 

あなたを返されたJSONを解析してルビー配列にし、それをあなたのビューに表示することができます。 この例では、HTTPリクエストを作成するためにHTTParty gemを使用していますが、他の利用可能なルビライブラリを使用して同じことを行うことができます。

フォームは次のように見ることができます:

<%= form_tag search_path, method: :post do %> 
    <%#= Your input tags %> 
<% end %> 
+0

それは私のために働いていないようです:まだsearch_pathを認識しません。ルートでは、 "lists_search#search"を意味しましたか? –

+0

ルートは単なる例でした。独自のルートとコントローラ名を使用できます。注目すべき点は、コントローラ上でAPI呼び出しを行い、レスポンスを解析する必要があることです。 –

関連する問題