如何将变量插入此json对象?

时间:2014-06-29 14:52:43

标签: javascript ruby-on-rails json

我正在创建一个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”,但它不起作用。的谢谢!

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

RestClient可以接受hash作为params。你不必在你的代码中将它转换为json。

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

答案 2 :(得分:1)

你总是可以通过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

将变量名称周围的#{}语法转换为String。我应该提一下,这只适用于双引号,而不是单引号。因此,您需要更改语法并转义其他双引号才能生效,如上例所示。

肯定有更优雅的方法可以解决这个问题,但这会让你进入下一步。