Sha256: ce0278ea416aff21a42ed30acfdffc84a0b600276b67e5d1f2b3b8953c00c419
Contents?: true
Size: 1.53 KB
Versions: 1
Compression:
Stored size: 1.53 KB
Contents
module Org module Model::OrganDomain extend ActiveSupport::Concern included do attribute :subdomain, :string attribute :domain, :string, default: Rails.application.routes.default_url_options[:host] attribute :port, :string, default: Rails.application.routes.default_url_options[:port] attribute :host, :string attribute :identifier, :string, index: true attribute :appid, :string attribute :default, :boolean, default: false belongs_to :organ belongs_to :wechat_app, class_name: 'Wechat::App', foreign_key: :appid, primary_key: :appid, optional: true validates :identifier, uniqueness: true after_initialize :init_subdomain, if: -> { new_record? && subdomain.nil? } before_validation :compute_identifier, if: -> { (changes.keys & ['domain', 'subdomain', 'port', 'host']).present? } after_update :set_default, if: -> { default? && saved_change_to_default? } after_save :sync_domain_to_organ, if: -> { saved_change_to_identifier? || (default? && saved_change_to_default?) } end def set_default self.class.where.not(id: self.id).where(organ_id: self.organ_id).update_all(default: false) end def sync_domain_to_organ organ.update domain: identifier end def compute_identifier self.host = [subdomain.presence, domain].compact.join('.') self.identifier = [host, port.presence].compact.join(':') end def init_subdomain self.subdomain = ['org', organ_id].join('-') compute_identifier end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
rails_org-0.0.1 | app/models/org/model/organ_domain.rb |