HTTParty不在POST请求中发送对象参数

时间:2015-02-01 17:42:02

标签: ruby-on-rails httparty

我正在构建一个服务的基本管理员应用程序,用于提高创建新用户的效率。现在,我在应用程序中手动完成它,并且它有一些我想要自动执行的繁琐步骤。

该服务将用户视为"会员"

所以我在rails项目中创建了一个Members scaffold,它与成员在Service中的参数相同。

我想在我的应用程序中执行此操作,而不是在服务应用程序中输入一些数据。所以我有一个包含多个参数的表单,用于创建成员并保存这些参数::usname :usemail :usstudio_uid

接下来,我想使用输入的初始字段POST到Service API,以创建"邀请"对于新成员。

我试图通过在我的会员的显示视图中调用HTTParty函数来实现这一点。

我的表单正确保存参数,我通过HTTParty连接到Service API并创建邀请OK,但我要发送的成员参数不会填充。相反,它转向了我认为是纯文本参数的参考。

该功能的片段:

:body => {"callback_url" => "https://foo.com/#invitations", "consumer_key" => "my consumer_key", "email" => :usemail,

我想:usemail引用显示页面中引用的成员的参数(即cliff@foo.com)。相反,正如您将在下面看到的那样,Service API会认为参数是一个字符串,返回" usemail"作为email参数,而不是我想引用的Member对象的参数。

我对铁轨和编码很陌生,所以它可能是一个明显的答案,但我昨天花了6个小时试图找出它。救命! :)

members.rb模型:

class Member < ActiveRecord::Base
end

members_controller rb:

  Class MembersController < ApplicationController
  before_action :set_member, only: [:show, :edit, :update, :destroy]

  respond_to :html

  def index
    @members = Member.all
    respond_with(@members)
  end

  def show
    @member = Member.find(params[:id])
  end

  def new
    @member = Member.new
    respond_with(@member)
  end

  def edit
    respond_with(@member)
    @member.save
  end

  def create
    @member = Member.new(member_params)
    @member.save    
    respond_with(@member)
  end

  def update
    @member.update(member_params)
    respond_with(@member)
  end

  def destroy
    @member.destroy
    respond_with(@member)
  end

  private
    def set_member
      @member = Member.find(params[:id])
    end

    def member_params
      params.require(:member).permit(:usname, :usemail, :usphone, :uspassword, :usconfirm_password, :usinvitation_uid, :usstudio_uid, :uscallback_url, :usmember_uid, :ususername, :usaccess_token) 
    end
end

在我的members_helper.rb中:

def getinvitation(member)

  result = HTTParty.post "https://foo.com/api/v2/studios/studio_uid/invitations", :body => {"callback_url" => "https://foo.com/#invitations", 
          "consumer_key" => "my consumer_key", "email" => :usemail, 
          "name" => :usname, "studio_uid" => :usstudio_uid
           }.to_json, :headers => {'X-Auth-Token' => "my token"}
           JSON.parse(result.body)
          x = ActiveSupport::JSON.decode(result.body)

    end 

我在会员的节目路径中调用该功能:

views/members/show.html.erb

<%= getinvitation(@member) %>

以下是我得到的回复:

   {"uid"=>"29ad0740f4aa47d788bb2a34e9ab7d78", "studio_uid"=>"ORfspJitFbVG",
     "date_sent"=>"Sun Feb 1 16:49:21 2015", callback_url"=>"https://app.ustudio.com/#invitations?
    invitation_uid=29ad0740f4aa47d788bb2a34e9ab7d78&studio_uid=ORfspJitFbVG", 
    "consumer_key"=>"my consumer_key", "email"=>"usemail", "name"=>"usname"}

1 个答案:

答案 0 :(得分:0)

基本上,这就是我要找的东西

"email" => member.usemail不是:usemail"usemail"