将数据移动到另一个表

时间:2015-07-27 12:34:56

标签: sql ruby-on-rails ruby postgresql activerecord

我有一个问题与将数据从一个表移动到另一个表有关。我使用Postgres作为数据库。 我有两个模型:

class User < ActiveRecord::Base
  has_many :emails
end


class Email < ActiveRecord::Base
  belongs_to :user
end

架构如下所示:

  create_table "users", force: :cascade do |t|
    t.string   "first_name",  limit: 255
    t.string   "last_name",   limit: 255
    t.string   "email"
    t.datetime "created_at",              null: false
    t.datetime "updated_at",              null: false
  end

  create_table "emails", force: :cascade do |t|
    t.string   "email",      null: false
    t.integer  "user_id"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

现在,我想为用户移动最新的电子邮件,并将其保存在用户表格电子邮件列中。我可以在迁移中使用Rails模型轻松地完成它,但是当我重命名模型或删除它时。迁移将失败。使用原始sql有没有简单的方法呢?

2 个答案:

答案 0 :(得分:2)

您可以使用window functions。以下示例是一个起点。

UPDATE users u
SET u.email = (SELECT 
                 MAX(FIRST_VALUE(email)) OVER (PARTITION BY user_id ORDER BY created_at DESC)
               FROM emails e
               WHERE e.user_id = u.id);

答案 1 :(得分:1)

您仍然可以将ActiveRecord与假类一起用于迁移目的。类似的东西:

$('#your_table_id').on('click', 'td', function () {
  $(this).closest('tr').css({'background-color': 'red'});
});