2012-10-27 3 views
10

Stellen Sie sich vor ich folgende Modelle haben:Gibt es eine einfachere Möglichkeit, verwandte Daten mit ActiveAdmin zu erstellen/auszuwählen?

class Translation < ActiveRecord::Base 
    has_many :localizations 
end 

class Localization < ActiveRecord::Base 
    belongs_to :translation 
end 

Wenn ich dies tun in ActiveAdmin:

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

Der Verein für Wort wird mir erlauben nur aus bestehenden Worte zu wählen. Allerdings hätte ich gerne die Möglichkeit, spontan ein neues Wort zu erstellen. Ich dachte, es könnte nützlich sein, geschachtelte Attribute im Lokalisierungsmodell zu akzeptieren (aber dann habe ich nur die Möglichkeit, ein Wort zu erstellen, nicht aus vorhandenen auszuwählen). Wie kann ich dieses Problem lösen?

+0

In Ihrem ActiveAdmin wie würden Sie bestimmen möchten, welche die aktuelle Übersetzung - es ist aus einem Menü oder in params (vorbei url) gespeichert? –

+0

Ich sollte es entweder aus einem Menü auswählen oder eine neue Übersetzung und eine neue Lokalisierung (alle auf einmal) erstellen können – Geo

Antwort

10

Ich glaube, Sie können für dieses

Beispiel mit virtuellem Attribute versuchen (nicht getestet)

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 

Die Hauptidee ist es, neue Word-Instanz zu erstellen und zu speichern, bevor die Lokalisierung zu sparen und es statt word_id verwenden aus dem Drop-down-Menü.

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

    end 
end 

Es gibt große Schienen Guss über virtuelle Attribute http://railscasts.com/episodes/167-more-on-virtual-attributes

Verwandte Themen