【问题标题】:How can I insert a variable into this json object?如何将变量插入此 json 对象?
【发布时间】:2014-06-29 14:52:43
【问题描述】:

我正在创建一个 Rails 应用程序,它将通过这篇文章与 TeamSnap 的 API 对话:

def create_team
  RestClient.post("https://api.teamsnap.com/v2/teams", '{"team": {"team_name": 
  "Braves", "sport_id": 1, "timezone": "Mountain Time (US & Canada)", "country": 
  "United States", "zipcode": 80302}}',content_type: :json,
   x_teamsnap_token: '000-000-000-000')
end

RestClient.post 工作正常,但如您所见,所有信息都是硬编码的。我希望能够在这篇文章中使用变量,这样我就可以从我的应用程序中获取它们,然后通过这篇文章和 TeamSnap 的 API 发送它们,它将使用这些信息在 TeamSnap 上创建一个新团队。

换句话说,我将有一个表格,例如,在我的应用程序中,您可以输入一个新的团队名称。我想将此值传递给该对象,而不必对其进行硬编码(即“勇敢者”)。除非您使用引号,否则该对象将不起作用。我尝试创建一个变量@team_name 并用它替换“Braves”,但它不起作用。 谢谢!

【问题讨论】:

    标签: javascript ruby-on-rails json


    【解决方案1】:

    您可以使用强参数来获取表单发布的数据:

    def team_params
      params.require(:team).permit(:team_name)
    end
    

    然后在create_team 中,您可以将此哈希转换为 json 字符串:

    def create_team
      RestClient.post("https://api.teamsnap.com/v2/teams", team_params.to_json, content_type: :json, x_teamsnap_token: '000-000-000-000')
    end
    

    编辑:要测试此代码,您可以像这样硬编码:team_name 的值:

    def create_team
      team_params = {team: {team_name: 'Gophers'}}
    
      RestClient.post("https://api.teamsnap.com/v2/teams", team_params.to_json, content_type: :json, x_teamsnap_token: '000-000-000-000')
    end
    

    【讨论】:

    • 感谢您的回答。我还很新 - 你能告诉我如何硬编码 :team_name 来测试它吗?即,我如何将 :team_name 设置为“Gophers”或其他任何东西,以便我可以测试它?谢谢
    • @david 更新了我的答案。
    • 我尝试了更新的代码并得到了这个错误:参数丢失或值为空:团队
    • @david 此代码假定表单发送了值,因此如果没有真正的请求,实际上不可能使用它。更新了使用简单哈希的示例。
    • 啊,明白了。会再试一次。感谢您继续提供帮助。
    【解决方案2】:

    RestClient 可以接受哈希作为参数。您不必在代码中将其转换为 json。

    RestClient.post 'https://api.teamsnap.com/v2/teams', {"team" => {"team_name" => params[:team_name], ...}}
    

    【讨论】:

    • 感谢您的回答。我还很新 - 你能告诉我如何硬编码 :team_name 来测试它吗?即,我如何将 :team_name 设置为“Gophers”或其他任何东西,以便我可以测试它?谢谢
    • @david 如果您使用的是 Rails,则 params 表示用户提交的值,您可以在控制器内的操作代码中设置 params[:team_name] = "Gophers"。您也可以使用普通的 ruby​​ 脚本对其进行测试,只需将 team_name 设置为变量即可。
    • 我收到 403 错误。这就是我所拥有的: def team_params params.permit(:team_name) end def create_team params[:team_name] = "Gophers" RestClient.post('api.teamsnap.com/v2/teams', {"team" => {"team_name" => params[ :team_name], "sport_id" => 1, "timezone" => "山地时间(美国和加拿大)", "country" => "United States", "zipcode" => 80302}, content_type: :json, x_teamsnap_token : '000-000-000'}) 结束
    【解决方案3】:

    您总是可以通过 Ruby 进行简单的字符串插入:

    def create_team(team_name, sport_id, zip_code)
      RestClient.post("https://api.teamsnap.com/v2/teams", "{\"team\": {\"team_name\": 
      \"#{team_name}\", \"sport_id\": #{sport_id}, \"timezone\": \"Mountain Time (US & Canada)\", \"country\": 
      \"United States\", \"zipcode\": #{zip_code}}}',content_type: :json,
      x_teamsnap_token: '000-000-000-000')
    end
    

    这是 #{} 语法将变量名转换为字符串。我应该提一下,这只适用于双引号,而不是单引号。因此,您需要更改语法并转义其他双引号才能使其正常工作,如上例所示。

    肯定有更优雅的方法来处理这个问题,但这会让你进入下一步。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-20
      • 1970-01-01
      • 1970-01-01
      • 2012-02-02
      相关资源
      最近更新 更多