gpt4 book ai didi

ruby-on-rails - find_or_create_by_id 的最佳方法,但如果找到记录则更新属性

转载 作者:数据小太阳 更新时间:2023-10-29 07:29:25 32 4
gpt4 key购买 nike

我正在寻找一种干净的方法来创建具有一组属性的记录(如果记录不存在)并且 - 如果记录存在 - 更新其属性。我喜欢 find_or_create_by_id 调用中 block 的语法。这是我的代码:

@categories = Highrise::DealCategory.find(:all)

@categories.each do |category|
puts "Category: #{category.name}"

Category.find_or_create_by_id(category.id) do |c|
c.name = category.name
end
end

这里的问题是,如果记录存在但名称已更改,则不会更新。

正在为这个问题寻找一个干净的解决方案...

最佳答案

您可以编写自己的方法:

class ActiveRecord::Base
def self.find_by_id_or_create(id, &block)
obj = self.find_by_id( id ) || self.new
yield obj
obj.save
end
end

用法

 Category.find_by_id_or_create(10) do |c|
c.name = "My new name"
end

当然,在这种情况下,您应该扩展method missing 方法并以与其他find_by_something 方法相同的方式实现此方法。但对于简短来说,这就足够了。

关于ruby-on-rails - find_or_create_by_id 的最佳方法,但如果找到记录则更新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5160073/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com