Skip to content

Instantly share code, notes, and snippets.

@romchambe
Last active September 18, 2018 13:53
Show Gist options
  • Save romchambe/f5812797f7cac1513edcda5e1371acb0 to your computer and use it in GitHub Desktop.
Save romchambe/f5812797f7cac1513edcda5e1371acb0 to your computer and use it in GitHub Desktop.
Setup of SSL certificate on Heroku with Gandi

SSL setup: https://vimeo.com/209534466

Creating a join table

rails g migration CreateJoinTableGameInvitesInvitees game_invites invitees

  • Models linked together must be in alphabetical order when naming the migration file
  • The columns can be given any names as long as they are correctly associated in the model file:
has_and_belongs_to_many :invitees, class_name: 'User', foreign_key: 'invitee_id', #the associated column and the alien model
                        join_table: 'game_invites_invitees', #name of the join table
                        association_foreign_key: 'game_invite_id' #the name of the domestic model in the join table

Using enums

It is possible to declare a series of values that will be stored as an integer in the database (so declare the column as integer in the migration file). The series of values must be declared as an array using the enum method in the model. Some methods will be created automatically:

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end

# Using enum will create some methods
conversation.active!
conversation.active? # => true
conversation.status  # => "active"

# and some scopes
Conversation.active
Conversation.archived

Use UUIDs as database IDs (with pg)

Original article

Supposing we are using Postgre as a database, it only takes the following steps to use UUIDs as database IDs instead of incremental ones:

  1. Generate a migration: rails g migration EnablePgcryptoExtension
  2. Modify the migration file to this:
class EnablePgcryptoExtension < ActiveRecord::Migration[5.1]
  def change
    enable_extension 'pgcrypto'
  end
end
  1. Tell ActiveRecord that the new generator for IDs should be UUIDs:
#config/application.rb 
config.generators do |g|
  g.orm :active_record, primary_key_type: :uuid
end

NB: on uuid use for references and join tables

It is important to declare that a given model is using uuids when creating references or join tables, otherwise columns will store the values under wrong types in the DB:

  1. To make a reference with uuids, an example of migration, the type: :uuid flag must be added in the association column declaration:
class CreateMessages < ActiveRecord::Migration[5.1]
  def change
    create_table :messages, id: :uuid do |t|
      t.references :player, type: :uuid
      t.text :content
      t.integer :turn_number
      t.boolean :read

      t.timestamps
    end
  end
end
  1. To create a join table between models using uuids:
class CreateJoinTableGameInvitesInvitees < ActiveRecord::Migration[5.1]
  def change
    create_join_table :game_invites, :invitees, column_options: {type: :uuid} do |t|
      t.index [:game_invite_id, :invitee_id]
      t.index [:invitee_id, :game_invite_id]
    end
  end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment