6

Sorunun, polimorfik görüntü niteliğini oluşturduğum şekilde olduğunu sanıyorum. Formda fields_for kullanıyorum. Bu durumda, kullanıcı bir gönderi oluşturabilir ve ataç kullanarak S3 ile saklayarak bir görüntü ekleyebilir.Rayları Yapılandırma 3 + Polimorfik Görüntü modeli + Paperclip ve Amazon S3, Hata yok, ancak hiçbir şey yüklenmiyor

class PostImage < ActiveRecord::Base 
    belongs_to :imageable, :polymorphic => true 
    #.merge(PAPERCLIP_OPS) 
    has_attached_file :image, :styles => { :medium => "200x200>", :thumb => "50x50>" }, 
          :storage => :s3, 
          :s3_credentials => "#{Rails.root}/config/s3.yml", 
          :path => "/:style/:id/:filename", 
          :bucket => "zounds-dev" 
    validates_attachment_presence :image 
    validates_attachment_size :image, :less_than => 5.megabytes 
end 

Mesaj Modeli:

class Post < ActiveRecord::Base 
    has_many :post_images, :as => :imageable, :dependent => :destroy 
    . 
    . 
    . 
    accepts_nested_attributes_for :post_images, :reject_if => lambda { |t| t[:post_image].nil?}, :allow_destroy => true 
end 

Yeni Mesaj Formu:

=form_for(setup_post(@post,current_user), :html => { :multipart => true}) do |f| 
    %dl 
    =f.fields_for :post_images do |ff| 
     =ff.file_field :image 
    %dt.field=f.label :name 
    %dd.field=f.text_field :name 
    %dt.field=f.label :description 
    %dd.field=f.text_area :description 
    =f.fields_for :user do |u| 
     =render "user_fields", :f => u 
    =f.fields_for :assignments do |ff| 
     =ff.check_box :_destroy, {:checked => ff.object.persisted?}, '0','1' 
     =ff.label :_destroy, ff.object.group.name 
     =ff.hidden_field :group_id 
    .action=f.submit "Save Post" 

setup_post Ben polimorfik görüntü modeli "post_image" kullanıyorum Mesaj form_for kullanılan yardımcı bir yöntem: (gruplar şeyler burada alakalı değildir)

def setup_post(post, current_user) 
    groups = current_user.groups_as_owner + current_user.groups_as_member 
    (groups - post.groups).each do |group| 
     post.assignments.build(:group => group) 
    end 
    post.assignments.sort_by {|x| x.group.name } 
    post_image = post.post_images.build 
    post 
    end 

Mesaj kontrolörü:

def new 
    @user = User.find(params[:user_id]) 
    # @post = @user.posts.build 
    @post = Post.new 
    respond_to do |format| 
     format.html # new.html.erb 
     format.xml { render :xml => @post } 
    end 
    end 

def create 
    @user = current_user 
    @post = @user.posts.build(params[:post]) 
    . 
    . 
    . 
end 

Sorunun ı için fields_for kullanıyorum olduğunu sanıyorum post_image özniteliği, ama her yere baktım ve bir polimorfik iç içe geçmiş görüntü özniteliğini uygulamak için uygun yolun ne olduğunu anlayamıyorum.

Ayrıca s3sh amazon s3 konsoluyla ilgili bir şey yaptım ve bir resim yükleyemediğim halde, open() işlevine doğru görüntü yolunu nasıl geçeceğimi anlayamadığım için S3'e bağlandım. Benim s3.yml dosyam da doğru şekilde kuruldu.

Teşekkür yall, Brian

cevap

1

Sorun, sorun giderilmiştir dışarı yorumlama Mesaj modeli

accepts_nested_attributes_for :post_images, :reject_if => lambda { |t| t[:post_image].nil?}, :allow_destroy => true

için accepts_nested_attributes yılında reject_if birlikteydi.

+0

Güzel olan. Teşekkürler dostum :) –

+0

Sadece birisi bunu okuduysanız: Sadece bu sayfayı sil: reject_if => lambda {| t | t [: post_image] .nil?} Görüntü kaydının silinmesini istiyorsanız, allow_destroy => true. –