Вы можете создать отдельную модель Abbreviation
, с которой ваша модель Company
может быть связана через модель соединения CompanyAbbreviation
. Тогда будет одна запись таблицы соединений для каждого столбца в конкретной записи компании. Вместо того, чтобы иметь каждую аббревиатуру в виде столбца в таблице компаний, у вас будут вторичные ключи в таблице company_abbreviations со ссылкой на связанную компанию и записи сокращений.
Что-то вроде следующего:
class Company < ActiveRecord::Base
has_many :company_abbreviations
has_many :abbreviations, :through => :company_abbreviations
end
class Abbreviation < ActiveRecord::Base
has_many :company_abbreviations
end
class CompanyAbbreviation < ActiveRecord::Base
belongs_to :company
belongs_to :abbreviation
end
class CreateAbbreviations < ActiveRecord::Migration
def self.up
create_table :abbreviations do |t|
t.string :abbr
t.string :description
end
add_index :abbreviations, :abbr
end
end
class CreateCompanyAbbreviations < ActiveRecord::Migration
def self.up
create_table :company_abbreviations do |t|
t.references :company
t.references :abbreviation
end
add_index :company_abbreviations, :company_id
add_index :company_abbreviations, :abbreviation_id
end
end
В db/seeds.db
вы можете предварительно заполнить таблицу abbreviations
.
Вы добавляете новые ассоциации, подобные этому:
@company.company_abbreviations.create(:abbreviation => Abbreviation.find_by_abbr("LTD"))
По вашему мнению, вы можете ссылаться на расширенные столбцы сокращений следующим образом:
<% @company.abbreviations.each do |abbr| %>
<%= abbr.description %>
<% end %>
Возможно, вы также захотите каким-то образом управлять порядком отображения, например, с помощью столбца сортировки в таблице соединений,