You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.6 KiB
54 lines
1.6 KiB
class Laboratory < ApplicationRecord
|
|
belongs_to :school, optional: true
|
|
|
|
has_many :laboratory_users, dependent: :destroy
|
|
has_many :users, through: :laboratory_users, source: :user
|
|
|
|
has_one :laboratory_setting, dependent: :destroy
|
|
|
|
has_many :portal_images, dependent: :destroy
|
|
|
|
has_many :laboratory_shixuns, dependent: :destroy
|
|
has_many :laboratory_subjects, dependent: :destroy
|
|
|
|
validates :identifier, uniqueness: { case_sensitive: false }, allow_nil: true
|
|
|
|
delegate :name, :navbar, :footer, :login_logo_url, :nav_logo_url, :tab_logo_url, :default_navbar, to: :laboratory_setting
|
|
|
|
def site
|
|
rails_env = EduSetting.get('rails_env')
|
|
suffix = rails_env && rails_env != 'production' ? ".#{rails_env}.educoder.net" : '.educoder.net'
|
|
|
|
identifier ? "#{identifier}#{suffix}" : ''
|
|
end
|
|
|
|
def self.find_by_subdomain(subdomain)
|
|
return if subdomain.blank?
|
|
|
|
rails_env = EduSetting.get('rails_env')
|
|
subdomain = subdomain.slice(0, subdomain.size - rails_env.size - 1) if rails_env && subdomain.end_with?(rails_env) # winse.dev => winse
|
|
|
|
find_by_identifier(subdomain)
|
|
end
|
|
|
|
def self.current=(laboratory)
|
|
Thread.current[:current_laboratory] = laboratory
|
|
end
|
|
|
|
def self.current
|
|
Thread.current[:current_laboratory] ||= Laboratory.find(1)
|
|
end
|
|
|
|
def shixuns
|
|
main_site? ? Shixun.all : Shixun.joins(:laboratory_shixuns).where(laboratory_shixuns: { laboratory_id: id })
|
|
end
|
|
|
|
def subjects
|
|
main_site? ? Subject.all : Subject.joins(:laboratory_subjects).where(laboratory_subjects: { laboratory_id: id })
|
|
end
|
|
|
|
# 是否为主站
|
|
def main_site?
|
|
id == 1
|
|
end
|
|
end |