2017-05-25 87 views
1

我想用多態關聯和神社實現多個文件上傳。Rails 5 +神殿多個文件上傳

class Campaign < ApplicationRecord 
    has_many :photos, as: :imageable, dependent: :destroy 
    accepts_nested_attributes_for :photos, allow_destroy: true 
end 

class Photo < ApplicationRecord 
    include ImageUploader::Attachment.new(:image) 
    belongs_to :imageable, polymorphic: true 
end 

我可以在瀏覽文檔後保存照片。
請指教如何驗證可成像範圍內圖像的唯一性。
我知道每個原始版本都可以生成簽名,但這是否正確?
謝謝。

回答

1

生成簽名是判斷兩個文件是否具有相同內容而不將這兩個文件加載到內存(您應該始終避免)的唯一方法。此外,使用簽名意味着如果將簽名保存到列中,則可以使用數據庫唯一性約束和/或ActiveRecord唯一性驗證。

這是你可以如何與靖國神社做到這一點:

# db/migrations/001_create_photos.rb 
create_table :photos do |t| 
    t.integer :imageable_id 
    t.string :imageable_type 
    t.text :image_data 
    t.text :image_signature 
end 
add_index :photos, :image_signature, unique: true 

# app/uploaders/image_uploader.rb 
class ImageUploader < Shrine 
    plugin :signature 
    plugin :add_metadata 
    plugin :metadata_attributes :md5 => :signature 

    add_metadata(:md5) { |io| calculate_signature(io) } 
end 

# app/models/image.rb 
class Photo < ApplicationRecord 
    include ImageUploader::Attachment.new(:image) 
    belongs_to :imageable, polymorphic: true 

    validates_uniqueness_of :image_signature 
end 
+0

謝謝!我計算了最後一天使用jQuery進行直接上傳。 :) – Anton