Ruby on rails 如何在保存前将新数据与bd中的现有数据进行比较
每次,当我从API请求中获取数据时,如果有任何更改,我都需要比较和更新记录 例如,我保存了一个用户Ruby on rails 如何在保存前将新数据与bd中的现有数据进行比较,ruby-on-rails,Ruby On Rails,每次,当我从API请求中获取数据时,如果有任何更改,我都需要比较和更新记录 例如,我保存了一个用户 user = User.first user.name => 'name_one' 当我调用api时,api返回我的用户名,但用户名被标记为'name\u two' 所以,我需要比较现有的用户和新到达的用户,如果名称更改,则替换它 调用api的示例 url= 'my api str' result = Curl.get(url) JSON.p
user = User.first
user.name => 'name_one'
当我调用api时,api返回我的用户名,但用户名被标记为'name\u two'
所以,我需要比较现有的用户和新到达的用户,如果名称更改,则替换它
调用api的示例
url= 'my api str'
result = Curl.get(url)
JSON.parse(result.body_str).each do |key, value|
value["commissions"].each do |k, v|
User.create(name: v["name"],etc... )
end
end
我很乐意提供任何建议。我相信您应该使用active record的私有方法将当前更新的值与存储值进行比较:
if send(:read_attribute, :attr) == self.attr
# value isn't changed
end
您可以阅读的其他信息:
来自控制器的验证
您应验证控制器中新创建的记录:
v['name'] = 'User 1'
user = User.create(name: v['name'])
user.name # => # User 1
试试这个代码
u = User.first
u.name = "name_two"
u.save if u.changes.include?("name")
您还可以尝试以下操作:
u = User.first
u.name = "name_two"
u.name_changed? #=> true/false
u.name_was #=> "name_one" if it was "name_one"
这些被称为脏方法,对此类任务非常有用
谢谢你需要解释你到底想要什么:你所说的变化是什么意思?你是说api请求?一个请求是什么样子的?您应该提供代码块或响应或请求的示例,同时也感谢服务器日志。如果你的问题无法解释,有经验的人就无法选择帮助你解决问题。希望你能理解。谢谢请提供调用Rails APII的示例;我更新了我的答案