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

时间:2014-11-25 11:02:38

标签: ruby-on-rails

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

例如我保存了用户

    user = User.first
    user.name => 'name_one' 

当我打电话给api时,api会将我返回给用户,但是名字已经改为'name_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

我会很高兴有任何建议。

3 个答案:

答案 0 :(得分:1)

我相信你应该使用有效记录的私有方法#read_attribute来比较当前更新的值与商店的那些:

if send(:read_attribute, :attr) == self.attr
  # value isn't changed
end

您可以阅读其他信息here

来自控制器的验证

您应该从控制器验证新创建的记录:

v['name'] = 'User 1'
user = User.create(name: v['name'])
user.name # => # User 1

答案 1 :(得分:1)

试试此代码

u = User.first
u.name = "name_two"

u.save if u.changes.include?("name")

答案 2 :(得分:0)

您还可以尝试以下操作:

u = User.first
u.name = "name_two"
u.name_changed? #=> true/false
u.name_was #=> "name_one" if it was "name_one"

这些被称为脏方法,对这类任务非常有帮助。

由于