2012-10-27 8 views
10

Wyobraźmy mam następujące modele:Czy jest łatwiejszy sposób tworzenia/wybierania powiązanych danych z ActiveAdmin?

class Translation < ActiveRecord::Base 
    has_many :localizations 
end 

class Localization < ActiveRecord::Base 
    belongs_to :translation 
end 

Jeśli zrobić to w ActiveAdmin:

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

Stowarzyszenie dla słowa tylko pozwoli mi wybrać z istniejących słów. Chciałbym jednak mieć możliwość tworzenia nowego słowa w locie. Pomyślałem, że może być użyteczne zaakceptowanie zagnieżdżonych atrybutów w modelu lokalizacji (ale wtedy będę miał tylko opcję tworzenia Worda, nie wybierając z istniejących). Jak mogę rozwiązać ten problem?

+0

W swojej ActiveAdmin jak chciałbyś, aby określić, który jest obecny Translation - wybierając go z menu lub przechowywane w params (przekazywane przez URL)? –

+0

Powinienem móc wybrać go z menu lub utworzyć nowe tłumaczenie i nową lokalizację (wszystkie naraz) – Geo

Odpowiedz

10

Myślę, że można spróbować użyć atrybutu wirtualny tego

przykładu (nie testowane)

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 

Główną ideą jest, aby tworzyć i przechowywać nową instancję programu Word przed zapisaniem lokalizację i używać go zamiast word_id z rozwijanego menu.

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

    end 
end 
Nie

jest wielkie szyny odlewu o atrybutach wirtualnych http://railscasts.com/episodes/167-more-on-virtual-attributes

Powiązane problemy