首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法使用RocketPants客户端发送post或put参数

无法使用RocketPants客户端发送post或put参数
EN

Stack Overflow用户
提问于 2013-12-08 17:10:41
回答 1查看 213关注 0票数 0

我正在使用RocketPants宝石编写api客户端,并试图使用gem中包含的HTTParty来读取、创建、更新和销毁资源。

阅读和销毁工作正常,但我面临创建和更新资源的问题(在下面的例子中,事件)。

具体来说,我正在尝试以下几点:

代码语言:javascript
复制
def create_event params
  post "events", :body => { :event => params }, :transformer => Event
end

但是在API方面,它总是给我

代码语言:javascript
复制
Rendering error for ActionController::ParameterMissing:
key not found: event

即使我把它包含在帖子请求中。

但是,当我尝试直接使用HTTParty时,如下所示:

代码语言:javascript
复制
HTTParty.post(
  "http://localhost:3000/1/events",
  :headers => {
    'Authorization' => ActionController::HttpAuthentication::Token.encode_credentials("test token")
  },
  :body => {
    :event => {
      :name => "test"
    }
  }
)

它可以工作,所以不可能是API不起作用。这种方法有两个缺点:我需要手动传递授权,结果不会被包装为事件。

我是否遗漏了任何适当发送邮件和发送请求的内容?我还查看了文档和规范,但在发布/放置时找不到任何东西(例如,请参阅spec.rb)。

这是我的完整代码:

代码语言:javascript
复制
require "ticket_gate/version"
require "rocket_pants"

module TicketGate
  class Client < RocketPants::Client
    # ---- Setup -----------------------------------
    # ----------------------------------------------
    version 1
    base_uri 'http://localhost:3000'

    def initialize access_token = nil
      raise 'Please initialize with your api access token' unless access_token
      @access_token = access_token
    end

    def base_request_options
      { :headers => { 'Authorization' => ActionController::HttpAuthentication::Token.encode_credentials(@access_token) } }
    end

    # ---- Events -----------------------------------
    # -----------------------------------------------
    class Event < APISmith::Smash
      property :created_at
      property :end_at
      property :id
      property :name
      property :parent_id
      property :start_at
      property :ticket_limit
      property :updated_at
    end

    def list_events
      get "events", :transformer => Event
    end

    def get_event id
      get "events/#{id}", :transformer => Event
    end

    #### HERE IS THE PROBLEM
    def create_event params
      post "events", :body => { :event => params }, :transformer => Event
    end

    #### HERE IS THE PROBLEM
    def update_event id, params
      put "events/#{id}", :body => { :event => params }, :transformer => Event
    end

    def destroy_event id
      delete "events/#{id}", :transformer => Event
    end
  end
end
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-08 18:08:26

RocketPants内部对HTTP请求使用API Smith

API Smith文档中,我试图找出如何正确地传递POST参数,我猜这就是您应该做的:

代码语言:javascript
复制
post "events", :extra_body => { :event => params }, :transformer => Event
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20456295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档