【发布时间】: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