我目前正在开发一个Rails应用程序,在那里我试图向FormStack API提交一个表单。请求如下所示。
这就是请求的样子:
POST /api/v2/form/12345/submission.json HTTP/1.1
Host: www.formstack.com
Authorization: Bearer YOUR_APP_OAUTH_TOKEN
Accept: application/json
Content-Type: application/json
field_12345=Example&field_12346=Answer我试图在我创建的库上使用Httparty来实现它,以便向这个API服务发出请求。
module FormStack
class Form
include HTTParty
attr_reader :form_id
base_uri "https://www.formstack.com/api/v2"
def initialize
@access_token = ENV.fetch('FORMSTACK_ACCESS_TOKEN')
@form_id = ENV.fetch('FORMSTACK_FORM_ID')
end
def create_form
self.class.get(relative_uri, headers: headers)
end
def submission
self.class.post(create_submission_uri, headers: headers, query: query)
end
private
def relative_uri
"/form/#{@form_id}/field.json"
end
def create_submission_uri
"form/#{@form_id}/submission.json"
end
def headers
{
"Accept" => "application/json",
"Content-Type" => "application/json",
"Authorization" => "Bearer #{@access_token}"
}
end
def query
{
"field_66563890" => "blah",
"field_66563757" => "something"
}
end
end
end控制器
class FormsController < ApplicationController
def display_form
@form = FormStack::Form.new().create_form
end
def create
@form.submission
redirect_to 'localhost:3000'
end
end这是路线
get '/forms/display_form', to: 'forms#display_form'
post '/forms/submit', to: "forms#create"发布于 2018-07-20 01:41:52
首先,我有几件一般的红宝石东西给你:
FormStack::Form.new().create_form时,实际上不需要在.new之后使用.new -- ruby知道不带参数地调用方法,即使排除了双亲。FormsController::display_form中调用FormsController::create的,但现在我假设您正在使用魔术。不管怎样,关于我的答案。正如您的错误消息所述,错误与您在没有submission方法的东西上调用submission有关。有了这些知识,我们就可以在这一行中查看您正在调用提交的对象:
@form.submission看起来你在@form上打电话给@form。好吧,让我们来看看您声明@form的位置
@form = FormStack::Form.new().create_form让我们把那份声明分成几个部分。首先,使用FormStack::Form.new()创建一个新的FormStack::Form实例。到目前一切尚好。FormStack::Form上定义了一个submission方法。但是,你在上面打电话给create_form。那么,让我们看看create_form所做的事情:
def create_form
self.class.get(relative_uri, headers: headers)
endcreate_form调用HTTParty,get提供的方法。get方法返回一个HTTParty::Response对象。因此,让我们解析再次设置@form的行。你要做的就是:
@form = FormStack::Form # This line sets the variable to a constant
@form = @form.new # This line sets the variable to be an instance of FormStack::Form
@form = @form.create_form # This line sets @form to be an instance of HTTParty::Reponse正如您所看到的,最后我们将@form设置为HTTParty::Reponse的实例,而不是FormStack::Form,而且由于HTTParty::Response没有submission方法,所以会出现错误。
基于这一探索,我们可以看到修复方法是将@form设置为FormStack::Form对象,我们可以通过将display_form操作更改为:
def display_form
@form = FormStack::Form.new
@form.create_form
endhttps://stackoverflow.com/questions/51431536
复制相似问题