【问题标题】:How to automatically save data from API - Ruby on Rails如何从 API 中自动保存数据 - Ruby on Rails
【发布时间】:2016-10-11 17:29:21
【问题描述】:

我在整个互联网上进行了搜索,但是,我似乎无法在这个问题上得到明确的答案。我正在使用 Block.io API 将比特币支付添加到我的应用程序中。我收到一个 JSON 哈希,其中包含每次付款的新比特币地址,我可以提取比特币地址,但我需要将其自动保存到我的数据库中,当用户访问特定页面时,该地址也将在该页面上生成。我正在使用 Postgresql

JSON 看起来像这样:

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

我有一个控制器,它调用 API 来生成地址:

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

比特币地址显示使用:

<%= @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

任何 cmets 或帮助将不胜感激。

【问题讨论】:

  • 首先,不要对修改状态、保存新内容等的任何内容使用 GET 请求。这不是语义化的,并且在 CSRF、日志等方面的安全性方面存在问题。使用 POST/PUT/补丁代替。之后,只需尝试这样做,例如使用常规的create 控制器操作,看看会发生什么。如果您遇到特定问题,您可以随时返回。
  • 我和@HalilÖzgür 在一起。除非您有真正的特殊情况,否则请尝试使用标准 REST 端点。这可以通过 POST 更好地通过bitcoin_addresses#create 之类的方式进行路由。
  • @tadman 我已经更新了控制器和路由,但我不熟悉从第 3 方 API 保存数据,您能否提供一些有关调用 API BlockIo.get_new_address 并保存的正确语法的指导它。由于我习惯于使用模型/控制器作为 payment = Payment.new 等... API 是如何或曾经“插入”在此方法上的?
  • 通常你会创建一个类似BitcoinAddress.create(address: BlockIo.get_new_addres['data']['address'])的方法。

标签: json ruby ruby-on-rails-5


【解决方案1】:

看起来BlockIo 已经在为您解析 JSON 字符串并返回常规 Ruby 哈希。

我会尝试这样的事情:

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

您可能需要检查响应new_address['status'] 的状态,并确保在保存之前地址存在。但是上面的代码应该可以帮助您入门。

您可能希望在付款创建后进行重定向或head :ok 之类的操作。

注意:您不需要使用@ 作为变量名。这通常仅在您将该信息传递给视图时使用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多