我是铁杆新手。
在活动记录中是否有一种简单的方法可以传递数据哈希值,如果记录存在,则更新它,如果不存在,则创建它吗?
data = {}
data["my_id"] = 356345
data["description"] = "test123"
w = Descriptions.new(data)
理想情况下,如果我运行上述内容,每次运行时只会有1条记录,而不是多条记录。
答案 0 :(得分:11)
假设您希望“my_id”位是唯一的,您可以运行
Descriptions.find_or_create_by_my_id(data["my_id"]).update_attributes(data)
答案 1 :(得分:0)
Rails中的ActiveRecord对象在ID参数中保留其标识。如果设置了ID,Rails将知道使用该ID更新数据库中的记录。
事实上, save
是创建,更新或以任何方式将对象保存到数据库的主要方式。像update_attributes
这样的其他方法只是在其核心使用save
的糖。
是的,你会得到许多好东西ModelName.find_or_create_by_name("Summer")
但是如果您在save
方法中传递了ID,那么将会更新ID,如果未传递ID,则会create
数据。
总是,Rails中的主键应该是“id”但你使用的“my_id”也可能是问题。