0

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

ありがとう!

4

1 に答える 1

0

'Object'からカバーImageableへの明示的なhas_one関係と、追加の画像用の個別のhas_many関係を使用して、関係を少し異なる方法でモデル化することをお勧めします。

同じコレクション内のすべての画像が必要な場合は、この投稿をご覧ください: fields_forを使用するときに関連付けにスコープを適用する方法は? fields_forヘルパーを設定するときに、has_manyコレクションのエントリの「スコープ」またはサブセットを指定する方法について説明します。Railsのfields_forヘルパーをラップするだけなので、semantic_fields_forヘルパーでも機能するはずです。

于 2013-01-27T09:55:54.937 に答える