Ruby on rails rails 3.1活动记录插入或更新

Ruby on rails rails 3.1活动记录插入或更新,ruby-on-rails,activerecord,insert,Ruby On Rails,Activerecord,Insert,我不熟悉rails 在活动记录中是否有一种简单的方法可以向其传递散列数据,如果该记录存在,则更新它,如果不存在,则创建它 data = {} data["my_id"] = 356345 data["description"] = "test123" w = Descriptions.new(data) 理想情况下,如果我运行上面的程序,每次运行时它将只有一条记录,而不是多条记录 假设您希望“我的id”位是唯一的,您可以运行 Descriptions.find_or_create_by_my

我不熟悉rails

在活动记录中是否有一种简单的方法可以向其传递散列数据,如果该记录存在,则更新它,如果不存在,则创建它

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

w = Descriptions.new(data)

理想情况下,如果我运行上面的程序,每次运行时它将只有一条记录,而不是多条记录

假设您希望“我的id”位是唯一的,您可以运行

Descriptions.find_or_create_by_my_id(data["my_id"]).update_attributes(data)

Rails中的ActiveRecord对象在ID参数中保留其标识。如果设置了ID,Rails将知道使用该ID更新数据库中的记录

save
实际上是创建、更新或以任何方式将对象保存到数据库的主要方式。其他方法,如
update\u attributes
,只是在核心部分使用
save
的糖

是的,你会得到很多好东西
ModelName。通过名称(“Summer”)查找或创建

但若您在将要更新的
save
方法中传递Id,若未传递Id,它将
创建
数据


通常,Rails中的主键应该是“id”,但您使用了“my_id”,这也可能是问题所在。

pablo
是Rails的新手。您告诉他使用补丁方式!看不出这里有什么不对。我的_id不是主键。所以这很好。嗨,我也喜欢你的答案,但我是个新手,所以我在这里有点迷茫,我如何将它用于大规模插入?我应该再问一个问题吗?嘿,朋友,我希望你找到了答案。但是为了完成,find_或create方法会找到对象,update属性会对对象进行更新。数据变量应该包含要插入(和保存)到对象中的所有属性。这有帮助吗?您可以使用
find\u或\u initialize
。这个答案是可行的,但它会为新记录保存两次(1.创建,2.更新)。这类似于SQL更新或插入。