【问题标题】:DataMapper: Create new record or update existingDataMapper:创建新记录或更新现有记录
【发布时间】:2010-04-02 16:08:07
【问题描述】:

DataMapper 是否提供了一种方便的方法来在不存在时创建新记录或更新现有记录?我在 API 文档中找不到任何内容。

这是我目前所拥有的,看起来不太优雅:

foo = Foo.get(id)
if foo.nil?
  foo = Foo.create(#attributes...)
else
  foo.update(#attributes...)
end
foo.save

【问题讨论】:

    标签: ruby datamapper


    【解决方案1】:
    Foo.first_or_create(:id=>id).update(attributes)
    

    (Foo.get(id) || Foo.new).update(attributes)
    

    【讨论】:

    • 从 1.1.0 版开始,这将引发 DataMapper::UpdateConflictError,无法在新资源上调用 Foo#update
    【解决方案2】:

    我只是试试

    Foo.first_or_create(:id=>id).update(attributes)
    

    但有时会出错,所以我从这里找到一些提示:DataMapper Docs

    现在我让我的代码像这样工作:

    Foo.first_or_create({:id=>id}, {:name => name}).update(:id => id, :name => name)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-25
      • 1970-01-01
      • 2023-01-12
      • 1970-01-01
      • 1970-01-01
      • 2012-07-25
      • 2021-03-30
      • 2011-12-10
      相关资源
      最近更新 更多