Skip to content

Instantly share code, notes, and snippets.

@myf9000
Created February 8, 2017 12:34
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save myf9000/63e7ed2a9bad78376d7fffa9ceff2fc2 to your computer and use it in GitHub Desktop.
Save myf9000/63e7ed2a9bad78376d7fffa9ceff2fc2 to your computer and use it in GitHub Desktop.
class CreateUsersPropositions < ActiveRecord::Migration
NOW_QUERY = "CAST(NOW() at time zone 'utc' AS timestamp)"
def up
create_table :widget_to_do_users_propositions do |t|
t.integer :user_id
t.integer :proposition_id
t.timestamps
end
add_index :widget_to_do_users_propositions, :user_id
add_index :widget_to_do_users_propositions, :proposition_id,
name: "index_widget_to_do_users_propositions_on_proposition_id"
add_index :widget_to_do_users_propositions, [:user_id, :proposition_id],
name: "index_widget_to_do_users_propositions_on_user_and_proposition"
propositions = select_all <<-SQL
SELECT id, user_id FROM widget_to_do_propositions WHERE user_id IS NOT NULL
SQL
propositions.each do |proposition|
insert <<-SQL
INSERT INTO widget_to_do_users_propositions(user_id, proposition_id, created_at, updated_at)
VALUES('#{proposition['user_id']}', '#{proposition['id']}', #{NOW_QUERY}, #{NOW_QUERY})
SQL
end
remove_column :widget_to_do_propositions, :user_id, :integer
end
def down
add_column :widget_to_do_propositions, :user_id, :integer
users_propositions = select_all <<-SQL
SELECT user_id, proposition_id FROM widget_to_do_users_propositions
SQL
users_propositions.each do |user_proposition|
update <<-SQL
UPDATE widget_to_do_propositions
SET user_id = #{user_proposition['user_id']}
WHERE id = #{user_proposition['proposition_id']}
SQL
end
drop_table :widget_to_do_users_propositions
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment