我有一个问题与将数据从一个表移动到另一个表有关。我使用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有没有简单的方法呢?
答案 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'});
});