Ho list box e relazioni modello nel database. Sto facendo le seguenti migrazioni per mantenere elenchi, rinominare elementi e aggiungere elementi:
def up
Fund.create min: 0, max: 1_000_000
add_column :sectors, :order, :integer, default: 0
Sector.create name: 'Agriculture', order: 1
Sector.create name: 'Construction', order: 2
Sector.find( 9).update! name: 'Consumer Products', order: 3
Funzionerà finché non sarà necessario eseguire il rollback di una migrazione, quindi le chiavi primarie per le nuove righe in fase di sviluppo non corrisponderanno più a quelle in fase di staging o produzione. Ho pensato di installare ActiveAdmin, ma poi avrei dovuto cambiare manualmente 3 diversi database (dev / staging / prod). Entrambi i modi sembrano noiosi. Ho pensato a #delete_all
ma ci sono vincoli di chiave esterna, e ci sono già utenti che usano gli elenchi in produzione. Esiste una convenzione Rails da aggiornare e aggiungere agli elenchi nel database?
Oh sì, ho anche provato a creare liste nel codice per mantenerle più facilmente, come
class Ownership
include ActiveModel::Model
attr_accessor :id, :name
def self.all
[
{ id: 1, name: 'Individual' },
...
].map { |v| Ownership.new v }
end
def self.find_by_id(id)
Ownership.all.select do |v|
v.id == id
end
end
Ma poi ogni volta che devo stampare uno dei valori, devo prima cercarlo per id
. Quindi invece di @record.ownership.name
devo usare @ownership = Ownership.find_by_id(@record.ownership_id); @ownership.name;
.
Oh sì, l'ho fatto anche io, quando ho davvero bisogno di tempo, che è il peggiore:
User Model:
@@list_options = %w[0 1-5 6-10 10+]
def self.list_options
@@list_options
end
User View:
=f.select :field_1yr, User.list_options.map.with_index{|x,i| [x,i]}