web-dev-qa-db-ja.com

has_many-belongs_to関係を持つActiveAdminフォーム?

モデルHomeとPhotoがあり、has_many --belongs_to関係(多態的な関係ですが、この場合は重要ではないと思います)があります。現在、アクティブな管理者を設定しています。管理者が家のフォームから家に写真を追加できるようにしたいと思います。

写真はCarrierWavegemによって管理されていますが、問題が簡単になるか難しいかはわかりません。

Active Admin Homeフォームに別のモデルのフォームフィールドを含めるにはどうすればよいですか?このようなことをした経験はありますか?

class Home < ActiveRecord::Base
  validates :name, :presence => true,
                     :length => { :maximum => 100 }
  validates :description, :presence => true      
  has_many :photos, :as => :photographable

end


class Photo < ActiveRecord::Base
    belongs_to :photographable, :polymorphic => true
    mount_uploader :image, ImageUploader
end
20
agente_secreto

App/admin /home.rbで次のようなものを試してください。

form do |f|
  f.inputs "Details" do
    f.name
  end

  f.has_many :photos do |photo|
    photo.inputs "Photos" do
      photo.input :field_name 
      #repeat as necessary for all fields
    end
  end
end

あなたの家のモデルにこれを持っていることを確認してください:

accepts_nested_attributes_for :photos

私はこれを別のスタックオーバーフローの質問から変更しました: 関連付けを通じてhas_manyを使用するモデルでActiveAdminを使用する方法は?

57
jfedick

あなたはこれを試すことができます:

form do |f|
  f.semantic_errors # shows errors on :base
  f.inputs          # builds an input field for every attribute

  f.inputs 'Photos' do
    f.has_many :photos, new_record: false do |p|
      p.input :field_name
      # or maybe even
      p.input :id, label: 'Photo Name', as: :select, collection: Photo.all
    end
  end

  f.actions         # adds the 'Submit' and 'Cancel' buttons  
end

また、 https://github.com/activeadmin/activeadmin/blob/master/docs/5-forms.mdNested Resources

1
MegaCasper

ネストされたモデルのフォームを探していると思います。次のrailscastを見てください。

http://railscasts.com/episodes/196-nested-model-form-part-1

http://railscasts.com/episodes/197-nested-model-form-part-2

Active_adminについてはあまり説明できませんが、ネストされたモデルの処理に違いはないと思います。

0
rangalo

私は次のようなhas_oneモデルを持っています:

f.has_many :addresses do |a|
  a.inputs "Address" do
    a.input :street  ... etc.

これは、f.has_oneを使用したAddress(ポリモーフィックモデル)の関連付けを正しく反映していますが、失敗します。それで私はhas_manyに切り替えました、そしてすべてが順調です。今を除いて、ユーザーが同じエンティティに対して複数のアドレスを作成できないようにする必要があります。

0
John Mount