每次,当我从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
我会很高兴有任何建议。
答案 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"
这些被称为脏方法,对这类任务非常有帮助。
由于