10

次のモデルがあると想像してください。

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を作成するオプションしかありません)。どうすればこの問題を解決できますか?

4

1 に答える 1

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

于 2012-12-15T01:14:38.687 に答える