2012-10-27 3 views
10

Immaginate Ho i seguenti modelli:C'è un modo più semplice di creare/scegliere i dati correlati con ActiveAdmin?

class Translation < ActiveRecord::Base 
    has_many :localizations 
end 

class Localization < ActiveRecord::Base 
    belongs_to :translation 
end 

Se faccio questo in ActiveAdmin:

ActiveAdmin.register Localization do 
    form do |f| 
    f.input :word 
    f.input :content 
    end 
end 

L'associazione per parola sarà solo mi permette di scegliere tra le parole esistenti. Tuttavia, mi piacerebbe avere la possibilità di creare una nuova parola al volo. Ho pensato che potrebbe essere utile accettare attributi nidificati nel modello di localizzazione (ma poi, avrò solo la possibilità di creare un Word, non di selezionare quelli esistenti). Come posso risolvere questo problema?

+0

Nella tua ActiveAdmin come si vorrebbe per determinare quale è l'attuale Traduzione - scegliendolo da un menu o conservati in params (passati da url)? –

+0

Dovrei essere in grado di selezionarlo da un menu o creare una nuova traduzione e una nuova localizzazione (tutto in una volta) – Geo

risposta

10

penso che si può provare a utilizzare l'attributo virtuale per questo

Esempio (non testato)

class Localization < ActiveRecord::Base 
    attr_accessor :new_word #virtual attribute 
    attr_accessible :word_id, :content, :new_word 
    belongs_to :translation 
    before_save do 
    unless @new_word.blank? 
     self.word = Word.create({:name => @new_word}) 
    end 
    end 
end 

L'idea principale è quella di creare e memorizzare nuova istanza di Word prima di salvare la localizzazione e utilizzarlo al posto di word_id dal menu a discesa.

ActiveAdmin.register Localization do 
    form do |f| 
    f.input :word 
    f.input :content 
    f.input :new_word, :as => :string 

    end 
end 
Ci

è grandi rotaie-gettano sugli attributi virtuali http://railscasts.com/episodes/167-more-on-virtual-attributes