Tôi nghi ngờ vấn đề nằm trong cách tôi tạo thuộc tính hình ảnh đa hình. Tôi đang sử dụng fields_for
trong biểu mẫu. Trong trường hợp này, người dùng có thể tạo một bài đăng và thêm hình ảnh bằng kẹp giấy, lưu trữ bằng S3. Tôi đang sử dụng đa hình hình ảnh mô hình "post_image":Cấu hình Rails 3 + Hình đa hình Mô hình + Kẹp giấy và Amazon S3, Không có lỗi, nhưng không có gì tải lên
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
bài mẫu:
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
New Post Mẫu:
=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"
Các setup_post
phương pháp helper sử dụng trong bài viết form_for
: (những thứ nhóm là không liên quan ở đây)
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
điều khiển mới gởi:
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
tôi nghi ngờ vấn đề là tôi đang sử dụng fields_for
cho thuộc tính post_image, nhưng tôi đã xem xét tất cả và không thể tìm ra cách thích hợp để thực hiện một thuộc tính hình ảnh lồng nhau đa hình là gì.
Tôi cũng đã làm điều điều khiển s3sh
amazon s3 và mặc dù tôi không thể tải lên hình ảnh vì tôi không thể tìm ra cách chuyển đường dẫn hình ảnh tới hàm open(), tôi đã kết nối với S3. Tệp s3.yml
của tôi cũng được thiết lập chính xác.
Cảm ơn yall, Brian
Đẹp nhất. Cảm ơn bạn đời :) –
Chỉ trong trường hợp ai đó đọc nội dung này: Chỉ xóa trang này: reject_if => lambda {| t | t [: post_image] .nil?} Bạn có thể để nguyên: allow_destroy => true nếu bạn muốn xóa bản ghi hình ảnh. –