我正在创建一个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”,但它不起作用。的谢谢!
答案 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。我应该提一下,这只适用于双引号,而不是单引号。因此,您需要更改语法并转义其他双引号才能生效,如上例所示。
肯定有更优雅的方法可以解决这个问题,但这会让你进入下一步。