我目前正在使用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"
答案 0 :(得分:1)
首先,我为您准备了一些红宝石产品:
FormStack::Form.new().create_form
时,实际上不需要()
之后的.new
-即使您排除了括号,ruby也知道不带任何参数的方法。FormsController::display_form
呼叫FormsController::create
的,但是现在我只是假设您使用的是魔术。无论如何,请继续回答我。如错误消息所述,该错误与您在没有submission
方法的地方调用submission
有关。有了这些知识,我们可以查看您在此行中调用的对象是什么:
@form.submission
您似乎在submission
上呼叫@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)
end
create_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
,并且由于{{ 1}},这就是为什么您会收到错误消息。
基于此探索,我们可以看到解决方法是改为将submission
设置为HTTParty::Response
对象,我们可以通过将@form
操作更改为:< / p>
FormStack::Form