ruby-on-rails - Ruby on Rails JSON 到模型转换
问题描述
def create
@match_data = JSON.parse(request.raw_post)
@match = @match_data["match"]
match = Match.new
match.match_length = @match["match_length"]
match.quest = @match["quest"]
match.humans_team_stats = @match["humans_team_stats"]
match.supernaturals_team_stats = @match["supernaturals_team_stats"]
@match_data["users_match_stats"].each do |user|
user_account = User.find user["id"]
match.users << user_account
match.save!
user_match_stats = UserMatchStat.new
user_match_stats.user = user_account
user_match_stats.match = match
user_match_stats.kills = user["kills"]
user_match_stats.deaths = user["deaths"]
user_match_stats.assists = user["assists"]
user_match_stats.damage_dealt = user["damage_dealt"]
user_match_stats.damage_taken = user["damage_taken"]
user_match_stats.first_blood = user["first_blood"]
user_match_stats.save!
match.user_match_stats << user_match_stats
end
render json: @match_data
end
这真的是将传入的 json 对象映射到 rails 模型并为其记录的最佳方法吗?一定有比这更好的方法...
解决方案
如果您的模型的列与 JSON 对象中的键相同(看起来它们来自您的代码片段),您可以使用symbolize_keys
将 json 对象转换为您的 rails 模型将接受作为提交参数的 ruby 哈希。它可能如下所示:
match = Match.create(match_length: @match["match_length"], quest: @match["quest"], humans_team_stats: @match["humans_team_stats"], supernaturals_team_stats: @match["supernaturals_team_stats"])
@match_data["users_match_stats"].each do |user|
user_account = User.find user["id"]
match.users << user_account
UserMatchStat.create(user.symbolize_keys)
end
推荐阅读
- angular - 断开连接后 Strophe.js 未重新连接
- vue.js - VueJs:如何将当前的迭代项传递给对话框?
- spring-boot - 如何访问 th:objects 列表并使用 th:each 遍历它?
- linkedin - LinkedIn API:获取当前速率限制
- javascript - 循环谷歌图表数据行
- c++ - 使用#include 将大量重复代码放入单独的文件中是否可以和/或正常?
- visual-studio - 忽略构建后事件错误
- c# - WPF - 将嵌套的自定义对象绑定到数据网格
- vue.js - Uncaught TypeError: $notify 在 vue 中创建全局通知时
- c# - 对已通过 JWT 授权的 Web API 控制器进行单元测试