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
Güzel olan. Teşekkürler dostum :) –
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. –