# == Schema Information
#
# Table name: org_identifiers
#
#  id                   :integer          not null, primary key
#  attrs                :string
#  identifier           :string
#  created_at           :datetime
#  updated_at           :datetime
#  identifier_scheme_id :integer
#  org_id               :integer
#
# Foreign Keys
#
#  fk_rails_...  (identifier_scheme_id => identifier_schemes.id)
#  fk_rails_...  (org_id => orgs.id)
#

class OrgIdentifier < ActiveRecord::Base
  include ValidationMessages

  # ================
  # = Associations =
  # ================

  belongs_to :org
  belongs_to :identifier_scheme

  # ===============
  # = Validations =
  # ===============

  # Should only be able to have one identifier per scheme!
  validates :identifier_scheme_id, uniqueness: { scope: :org_id,
                                                 message: UNIQUENESS_MESSAGE }

  validates :identifier, presence: { message: PRESENCE_MESSAGE }

  validates :org, presence: { message: PRESENCE_MESSAGE }

  validates :identifier_scheme, presence: { message: PRESENCE_MESSAGE }

  # ===========================
  # = Public instance methods =
  # ===========================

  def attrs=(hash)
    write_attribute(:attrs, (hash.is_a?(Hash) ? hash.to_json.to_s : '{}'))
  end
end

# == Schema Information
#
# Table name: org_identifiers
#
#  id                   :integer          not null, primary key
#  attrs                :string
#  identifier           :string
#  created_at           :datetime
#  updated_at           :datetime
#  identifier_scheme_id :integer
#  org_id               :integer
#
# Foreign Keys
#
#  fk_rails_...  (identifier_scheme_id => identifier_schemes.id)
#  fk_rails_...  (org_id => orgs.id)
#

class OrgIdentifier < ActiveRecord::Base
  include ValidationMessages

  # ================
  # = Associations =
  # ================

  belongs_to :org
  belongs_to :identifier_scheme

  # ===============
  # = Validations =
  # ===============

  # Should only be able to have one identifier per scheme!
  validates :identifier_scheme_id, uniqueness: { scope: :org_id,
                                                 message: UNIQUENESS_MESSAGE }

  validates :identifier, presence: { message: PRESENCE_MESSAGE },
                         uniqueness: { message: UNIQUENESS_MESSAGE }

  validates :org, presence: { message: PRESENCE_MESSAGE }

  validates :identifier_scheme, presence: { message: PRESENCE_MESSAGE }

  # ===========================
  # = Public instance methods =
  # ===========================

  def attrs=(hash)
    write_attribute(:attrs, (hash.is_a?(Hash) ? hash.to_json.to_s : '{}'))
  end
end

Add uniqueness validation to OrgIdentifier
Add uniqueness validation to OrgIdentifier
