Если вы уже выполнили миграцию для своих приглашений и пользователей, вам действительно следует поместить приглашение, заполняющее пользовательскую задачу rake.Всегда хорошая практика, чтобы сохранить ваши миграции строго для манипуляций с таблицами.
/ lib / tasks / distribte_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
После того, как вы выполнили свою миграцию, чтобы предоставить вашим пользователям таблицу приглашенияможно запустить:
rake db:distribute_invitations
, и ваши существующие пользователи будут иметь приглашения, созданные и связанные с ними через приглашение_ид.
Или для запуска всех ваших задач, которые вы можете выполнить:
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