设置 Rails 个具有相同值的模型属性会改变吗? return 是吗?
Will setting Rails model attributes with the same value make changed? return true?
我希望通过允许根据 [=15= 中的值创建或更新我的应用程序中的某些条目(或根本不更新)来使我的 db:seed
任务更加动态] 和后端数据库的当前状态。我还希望简化执行此逻辑的功能。
我想避免这种情况:
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?
方法将 return 只有在自上次保存后发生变化时才为真。来自使用我自己的应用程序控制台 (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
我希望通过允许根据 [=15= 中的值创建或更新我的应用程序中的某些条目(或根本不更新)来使我的 db:seed
任务更加动态] 和后端数据库的当前状态。我还希望简化执行此逻辑的功能。
我想避免这种情况:
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?
方法将 return 只有在自上次保存后发生变化时才为真。来自使用我自己的应用程序控制台 (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