class Study < ActiveRecord::Base
def site
@site ||= PrefixedSites.find(site_identifier)
end
def site=(new_site)
@site = new_site
self.site_identifier = new_site.identifier
end
def self.sites
Sites.all
end
end
add_column :studies, :site_identifier, :string
class Study
module Sites
class Site < Struct.new(:name, :identifier, :prefix); end
def self.all
[
{ name: "St Mary's", identifier: 'RYJ01@2.16.840.1.113883.2.1.3.2.4.19.2', prefix: 'SM' },
{ name: "Charing Cross", identifier: 'RYJ02@2.16.840.1.113883.2.1.3.2.4.19.2', prefix: 'CC' },
{ name: "Hammersmith", identifier: 'RYJ03@2.16.840.1.113883.2.1.3.2.4.19.2', prefix: 'HS' },
{ name: "Queen Charlotte's", identifier: 'RYJ04@2.16.840.1.113883.2.1.3.2.4.19.2', prefix: 'QC' },
{ name: "Western Eye Hospital", identifier: 'RYJ07@2.16.840.1.113883.2.1.3.2.4.19.2', prefix: 'WE' }
].map { |attrs| Site.new(*attrs.values) }
end
def self.find(identifier)
all.find { |s| s.identifier == identifier }
end
end
end
= f.input :site_identifier, :collection => Study.sites.map { |s| [s.name, s.identifier] }, label: 'Site'