设置 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