我想更新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:未定义的方法`update_attributes' for main: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
答案 0 :(得分:1)
你在做什么效率非常低:
Order.all.each do |tname|
tname.team = User.where(:id => tname.user_id).pluck(:team).shift
end
您按每个订单点击数据库,导致许多查询。此外,通过采摘选择球队是......很奇怪。如果您想获得User
并访问其团队,请使用:
User.find_by(id: tname.user_id).team
但是无论如何你应该在一个查询中执行此操作。如果你正确设置关系,这应该做的工作:
Order.joins(:user).update_all('team = users.team')
答案 1 :(得分:0)
奇怪的修复:
通过两个有效的步骤输入:
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
。
绝对不知道为什么......