2012-10-27 38 views
10

想象我有以下型號:使用ActiveAdmin創建/選擇相關數據有更簡單的方法嗎?

class Translation < ActiveRecord::Base 
    has_many :localizations 
end 

class Localization < ActiveRecord::Base 
    belongs_to :translation 
end 

如果我這樣做是ActiveAdmin:

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

一個字協會將只允許我從現有詞選擇。不過,我希望可以隨時創建一個新詞語。我認爲在本地化模型中接受嵌套屬性可能很有用(但是,我只能選擇創建一個Word,而不是從現有的選擇中選擇)。我怎麼解決這個問題?

+0

在你ActiveAdmin你想如何確定哪些是當前的翻譯 - 從菜單中選擇它或者存放在PARAMS(通過URL傳遞)? –

+0

我應該能夠從菜單中選擇它,或創建新的翻譯和新的本地化(全部一次) – Geo

回答

10

我想你可以嘗試使用虛擬屬性此

例(未測試)

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 

主要的想法是創建和保存本地化之前存儲新的Word實例,並用它來代替word_id的從下拉菜單中選擇。

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

    end 
end 

有很大的軌道鑄約虛擬屬性http://railscasts.com/episodes/167-more-on-virtual-attributes

相關問題