モデル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
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を使用する方法は?
あなたはこれを試すことができます:
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.md (Nested Resources)
ネストされたモデルのフォームを探していると思います。次のrailscastを見てください。
Active_adminについてはあまり説明できませんが、ネストされたモデルの処理に違いはないと思います。
私は次のようなhas_oneモデルを持っています:
f.has_many :addresses do |a|
a.inputs "Address" do
a.input :street ... etc.
これは、f.has_one
を使用したAddress
(ポリモーフィックモデル)の関連付けを正しく反映していますが、失敗します。それで私はhas_many
に切り替えました、そしてすべてが順調です。今を除いて、ユーザーが同じエンティティに対して複数のアドレスを作成できないようにする必要があります。