ruby-on-rails - 设置具有相同值的 Rails 模型属性会改变吗?返回真?
问题描述
我希望通过允许根据 in 的值和后端数据库的当前状态db:seed
创建或更新应用程序中的某些条目(或根本不更新)来使我的任务更加动态。db/seeds.rb
我还希望简化执行此逻辑的功能。
我想避免这种情况:
def create_or_update_config(key, value)
...
if config_entry.value != value
config_entry.value
end
if config_entry.changed?
config_entry.save
end
...
end
而是有一些简单的东西:
def create_or_update_config(key, value)
...
config_entry.value = value
if config_entry.changed?
config_entry.save
end
...
end
ActiveRecord 是否足够聪明,可以知道属性值是否已更改,即使它们已被设置(具有相同的值)?
解决方案
是的。ActiveRecord 的changed?
方法只有在上次保存后发生突变时才会返回 true。从使用我自己的应用程序控制台(Rails 5.1.6)的示例中:
irb(main):013:0> config.value
=> "http://localhost:3100"
irb(main):014:0> config.value = "http://localhost:3100"
=> "http://localhost:3100"
irb(main):015:0> config.changed?
=> false
irb(main):016:0> config.value = "anything else"
=> "anything else"
irb(main):017:0> config.changed?
=> true
推荐阅读
- google-chrome-extension - 如何在使用 chrome-extension 时保护 github-token?
- java - 如何使用jsoup获取第一个`href`字符串?
- reactjs - 对象作为 React 子项无效 - 无法解决错误
- docker - 使用 Dockerized NGINX 反向代理到 Dockerized REST API
- c# - NpgsqlConnection 和 OpenAsync() 方法导致 NullReferenceExeption
- c# - c#读取不同计算机操作系统和语言上的文本文件目录
- r - 通过R中的列号访问数据框中的变量?
- python - Django 表单:电话字段未显示
- c++ - 当给定要删除的节点的值时,如何从链表中删除节点
- c - 在指针之间进行算术运算的正确方法