gpt4 book ai didi

sql - Rails 迁移在另一个表中创建条目时更新现有记录

转载 作者:行者123 更新时间:2023-12-01 10:09:36 25 4
gpt4 key购买 nike

我正在尝试为我的 Rails 应用程序设置 Beta 邀请。我有一个邀请模型和一个用户模型。

用户有一个invitation_id。我正在验证用户必须有一个 invitation_id 并且它应该是唯一的。我想编写一个迁移,以便我可以更新我的现有用户以获得 invitation_id。

这是我的邀请模型:

# Table name: invitations
#
# id :integer not null, primary key
# sender_id :integer
# recipient_email :string(255)
# token :string(255)
# sent_at :datetime
# created_at :datetime
# updated_at :datetime

为了保证唯一性,我必须在邀请表中创建记录,并将相应的 id 分配给用户记录。

有人可以建议迁移吗?

提前致谢!

最佳答案

如果您已经为您的邀请和用户进行了迁移,您真的应该将邀请填充到自定义佣金任务中。将迁移严格用于表操作始终是一个好习惯。

/lib/tasks/distribute_invitations.rake

namespace :db do
desc "Run all custom tasks"
task :import_all => [:distribute_invitations, :some_other_data_import]

desc: "Some other data import"
task :some_other_data_import => :environment do
puts "insert task code here"
end

desc: "Give existing user's invitations"
task :distribute_invitations => :environment do
for user in User.all
if user.invitation_id.nil?
invite = Invitation.create(:sender_id => <some id>, :recipient_email => <some email>, :token => <some token>, :sent_at => Time.now)
user.update_attribute(:invitation_id, invite.id)
puts "Updated user #{user.id} with invitation_id #{invite.id}"
else
puts "User already has an invitation_id"
end
end
end
end

在您完成迁移并为您的用户表提供一个 invitation_id 之后,您可以运行:

rake db:distribute_invitations

并且您的现有用户将创建邀请并通过 invitation_id 关联到他们。

或者运行所有你能做的任务:

rake db:import_all

在这种情况下,很可能只是将其与您的用户迁移一起粘贴在迁移中:

class AddInvitationID < ActiveRecord::Migration
def self.up
add_column :users, :invitation_id, :integer
for user in User.all
if user.invitation_id.nil?
invite = Invitation.create(:sender_id => <some id>, :recipient_email => <some email>, :token => <some token>, :sent_at => Time.now)
user.update_attribute(:invitation_id, invite.id)
puts "Updated user #{user.id} with invitation_id #{invite.id}"
else
puts "User already has an invitation_id"
end
end
end

def self.down
remove_colum :users, :invitation_id
end
end

关于sql - Rails 迁移在另一个表中创建条目时更新现有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6668541/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com