rails 3.1活动记录插入或更新

时间:2012-02-21 07:08:47

标签: ruby-on-rails activerecord insert

我是铁杆新手。

在活动记录中是否有一种简单的方法可以传递数据哈希值,如果记录存在,则更新它,如果不存在,则创建它吗?

data = {}
data["my_id"] = 356345
data["description"] = "test123"

w = Descriptions.new(data)

理想情况下,如果我运行上述内容,每次运行时只会有1条记录,而不是多条记录。

2 个答案:

答案 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”也可能是问题。