正如我在之前的帖子rails has_many manager中所提到的,我正在尝试创建一个多态成像系统,该系统将允许任何项目继承具有封面照片和其他照片的能力。
为了实现这种成像系统,我支持使用belongs_to:imageable的多态模型,并将其活动记录功能扩展到名为Imageable的模块。
我的主要问题是,假设我们有一个名为Object的类,我怎样才能创建一个只针对第一个Object的has_many关联(封面)的表单,然后单独管理其他has_many关联?
表单看起来像..
---封面照片----
对象[image_attributes] [0] [public_id]
的上传按钮---附加照片的表格---
对象的上传按钮[image_attributes [1] [public_id]
image.rb
class Image < ActiveRecord::Base
attr_accessible :public_id
# Setup the interface that models will use
belongs_to :imageable, :polymorphic => true
end
Imageable.rb
module Imageable
extend ActiveSupport::Concern
included do
has_many :images, :as => :imageable, :dependent => :destroy # remove this from your model file
accepts_nested_attributes_for :images
validates :images, :presence => { :message => "At least one image is required" }
end
def cover
cover = images.where(:cover => true).first
if not cover
return Image.new
end
return cover
end
def additional_images
images.where(:cover => false).all
end
end
表格
<%= form.semantic_fields_for :images do |image_fields| %>
<%= image_fields.cl_image_upload(:public_id, :crop => :limit, :width => 1000, :height => 1000,
:html => {:class => "cloudinary-fileupload"}) %>
...
以上产生适当的路线,如object [image_attributes] [0] [public_id]
谢谢!
答案 0 :(得分:0)
我建议您通过使用从“对象”到封面Imageable的显式has_one关系以及其他图像的单独has_many关系来略微区别对关系进行建模。
如果您想要同一个系列中的所有图片,请查看此帖子: How to apply a scope to an association when using fields_for? 它解释了在设置fields_for帮助程序时如何指定has_many集合中条目的“范围”或子集。它应该与semantic_fields_for帮助器一起工作,因为它只是包装Rails fields_for帮助器。