以前のpostrailshas_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]のような適切なルートを生成します
ありがとう!