Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在保存前将新数据与bd中的现有数据进行比较_Ruby On Rails - Fatal编程技术网

Ruby on rails 如何在保存前将新数据与bd中的现有数据进行比较

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

每次,当我从API请求中获取数据时,如果有任何更改,我都需要比较和更新记录

例如,我保存了一个用户

    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的示例;我更新了我的答案