Best way to find_or_create_by_id but update the attributes if the record is found

前端 未结 7 1437
情书的邮戳
情书的邮戳 2021-01-06 03:50

I\'m looking for a clean way to create a record with a set of attributes if the record does not exist and - if the record do exist - to update its attributes. I love the syn

相关标签:
7条回答
  • 2021-01-06 04:17

    I think the simplest way is using Ruby's tap method, like this:

    Category.find_or_initialize_by(id: category.id).tap do |c|
      c.name = category.name
      c.save
    end
    

    Also, I changed find_or_create_by_id to find_or_initialize_by, otherwise it will hit the database twice.

    find_or_initialize_by finds or intitializes a record, then returns it. We then tap into it, make our updates and save it to the database.

    0 讨论(0)
提交回复
热议问题