Rails控制台:更新属性并保存到DB



我想更新rails控制台中的现有记录。

Order.all.each do |tname| tname.team = User.where(:id => tname.user_id).pluck(:team).shift end

正在工作,但结果没有保存到数据库中。

两个

Order.all.each do |tname| tname.team = User.where(:id => tname.user_id).pluck(:team).shift self.update_columns(team: tname.team) end

Order.all.each do |tname| tname.team = User.where(:id => tname.user_id).pluck(:team).shift self.update_attributes(team: tname.team) end

不工作。(NoMethodError:main的未定义方法"update_attributes":Object)

有什么想法吗?提前感谢!

编辑(架构):

create_table "users", force: :cascade do |t|
 t.text     "team"
end
create_table "orders", force: :cascade do |t|
 t.integer  "user_id"
 t.string   "team"
end

您所做的工作效率很低:

Order.all.each do |tname|
  tname.team = User.where(:id => tname.user_id).pluck(:team).shift
end

每一个订单都会访问数据库,从而产生许多查询。此外,通过勇气来选择球队是…wierd。如果你想获得User并访问其团队,请使用:

User.find_by(id: tname.user_id).team

但无论如何,您都应该在一个查询中执行此操作。如果你正确地设置了关系,这应该可以完成任务:

Order.joins(:user).update_all('team = users.team')

奇怪的修复:

通过在两个步骤中键入它可以工作:

1) Order.all.each do |tname| tname.team = User.where(:id => tname.user_id).pluck(:team).shift

2) tname.save end

代替

Order.all.each do |tname| tname.team = User.where(:id => tname.user_id).pluck(:team).shift tname.save end

完全不知道为什么。。

最新更新