我正在尝试设置选择菜单,以将ImageGallery与产品相关联。由于在一些模型之间共享,因此ImageGallery是多态的。 Formtastic似乎对做什么很困惑。它正在尝试调用一个名为Galleryable的方法,该方法是产品模型上我的多态关联的名称_id(galleryable_id)。
产品
class Product < ActiveRecord::Base
has_one :image_gallery, as: :galleryable, dependent: :destroy
accepts_nested_attributes_for :image_gallery, :allow_destroy => true
end
画廊
class ImageGallery < ActiveRecord::Base
belongs_to :galleryable, polymorphic: true
validates :title, presence: true
has_many :images, as: :imageable, dependent: :destroy
accepts_nested_attributes_for :images, :allow_destroy => true, reject_if: lambda { |t| t['file'].nil? }
end
事件管理员表单
form do |f|
f.inputs "Details" do
f.input :name
f.input :category
f.input :price
f.input :purchase_path
f.input :video_panels
f.input :image_panels
f.input :image_gallery, :as => :select, collection: ImageGallery.all, value_method: :id
end
f.inputs "Image", :for => [:image, f.object.image || Image.new] do |i|
i.input :title
i.input :file, :as => :file, required: false, :hint => i.template.image_tag(i.object.file.url(:thumb))
end
f.actions
end
我在模型上定义了galleryable_id,但这试图用属性(当然不存在)更新产品。
有人成功设置了吗?
谢谢,
科里
最佳答案
我很惊讶没有人回答,因为这是一个非常有趣的场景。
您几乎了解了它,但是错误地将您的关系嵌套在AA表单中。以下应改为:
form do |f|
f.inputs "Details" do
f.input :name
f.input :category
f.input :price
f.input :purchase_path
f.input :video_panels
f.input :image_panels
f.inputs "ImageGallery", :for => [:image_gallery, f.object.image_gallery || ImageGallery.new] do |gallery|
gallery.has_many :images do |image|
image.input :title
image.input :file, :as => :file, required: false, :hint => image.template.image_tag(image.object.file.url(:thumb))
end
end
end
f.actions
end
这会将“ImageGallery”绑定(bind)到您的产品。 has_one关系不能直接传递给您的父模型(就像您尝试使用
f.input :image_gallery
一样)。希望它有帮助:)
关于ruby-on-rails - Active Admin具有一种多态形式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22724638/