6

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

Trả lời

1

Vấn đề là với reject_if trong accepts_nested_attributes cho mô hình bài

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

cho ý kiến ​​nó ra cố định vấn đề này.

+0

Đẹp nhất. Cảm ơn bạn đời :) –

+0

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. –

Các vấn đề liên quan