2016-10-11 7 views
0

私はインターネット上で検索しましたが、この問題について明確な答えを得ることはできません。私はBlock.io APIを使ってBitcoin支払いを自分のアプリに追加しています。各支払いの新しいBitcoinアドレスを含むJSONハッシュを受け取ったので、Bitcoinアドレスを抽出できますが、データベースに自動的に保存する必要があります。ユーザーが特定のページにアクセスすると、そのページにアドレスも生成されます。APIからのデータを自動的に保存する方法 - Ruby on Rails

class PaymentsController < ApplicationController 
    def index 
    @new_address = BlockIo.get_new_address 
    end 
end 

そして、ビットコインアドレスを使用して表示されます:

私はアドレスを生成するためのAPIを呼び出して、コントローラを持って

{"status"=>"success", "data"=>{"network"=>"BTCTEST", "address"=>"2MstFNxtnp3pLLuXUK4Gra5dMcaz132d4dt", "available_balance"=>"0.01000000", "pending_received_balance"=>"0.00000000"}} 

:私は、JSONは次のようになりますPostgresqlの

を使用しています

<%= @new_address["data"]["address"] %> 

私はビットコインアドレスを保存する新しい関数を作成することを考えていますデータベースとは、特定のページにアクセスする際に、この機能を実行するためのルートをマップし、何かのように:

コントローラー:

class PaymentsController < ApplicationController 
    def create 
    @new_address = BlockIo.get_new_address 

## I need assistance with the rest to auto save 

    end 
end 

路線:

match '/save_btc' => 'payments#create', via: [:get, :post] 

誰かがdomain.com/save_btc開きますビットコインアドレスを自動的にデータベースに保存する必要があります。私はすでに、次の移行

rails g model Payment bitcoin:string 

を生成した

任意のコメントや支援が大幅に高く評価されます。

+1

まず、状態を変更したり、新しいものを保存したりするために、GETリクエストを使用しないでください。セマンティックではなく、CSRFやログなどに関するセキュリティ面で問題があります。代わりにPOST/PUT/PATCHを使用してください。その後、それをやろうとします。通常の 'create'コントローラアクションで何が起こるかを見てください。特定の問題が発生した場合はいつでも元に戻ることができます。 –

+0

私は@HalilÖzgürと一緒にいます。本当に例外的なケースがない限り、標準のRESTエンドポイントを試してみてください。これは、POST経由で 'bitcoin_addresses#create'のようなものを通る方が良いでしょう。 – tadman

+0

@tadmanコントローラとルーティングを更新しましたが、第三者APIからデータを保存することに慣れていません。API BlockIoを呼び出すための適切な構文についてのガイダンスを提供できますか?get_new_addressを作成し、保存します。モデル/コントローラをpayment = Payment.newなどとして使用することに慣れているので...このメソッドでAPIを「プラグイン」しているかどうか –

答えて

1

BlockIoはすでにJSON文字列を解析していて、通常のRubyハッシュを返しているようです。

私はこのような何かをしようとするだろう:

new_address = BlockIo.get_new_address 
Payment.create(bitcoin: new_address['data']['address']) 

あなたはおそらく応答new_address['status']のステータスをチェックし、アドレスを保存する前に存在していることを確認したいと思います。しかし、上記のコードはあなたを始めなければなりません。

お支払いが作成された後、おそらくhead :okのようなリダイレクトが必要になります。

注:変数名に@を使用する必要はありません。これは通常、その情報をビューに渡すときにのみ使用されます。

+0

ありがとうございました。それが私のトリックでした。 –

関連する問題