6

अपलोड करने के लिए कुछ भी नहीं, मुझे संदेह है कि समस्या पॉलीमोर्फिक छवि विशेषता बनाने के तरीके में है। मैं फॉर्म में fields_for का उपयोग कर रहा हूं। इस मामले में कोई उपयोगकर्ता एक पोस्ट बना सकता है और पेपरक्लिप का उपयोग करके एक छवि जोड़ सकता है, इसे S3 के साथ संग्रहीत कर सकता है।रेल 3 को कॉन्फ़िगर करना + पॉलिमॉर्फिक छवि मॉडल + पेपरक्लिप और अमेज़ॅन एस 3, कोई त्रुटि नहीं, लेकिन

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 

पोस्ट मॉडल::

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 

नई पोस्ट प्रपत्र:

=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 मैं एक बहुरूपी छवि मॉडल "post_image" उपयोग कर रहा हूँ सहायक विधि पोस्ट form_for में इस्तेमाल किया: (समूह सामग्री यहां प्रासंगिक नहीं है)

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 

पोस्ट नियंत्रक:

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 

मुझे लगता है समस्या यह है कि मैं के लिए fields_for का उपयोग कर रहा है post_image विशेषता, लेकिन मैंने पूरी तरह से देखा है और यह पता नहीं लगा सकता कि पॉलिमॉर्फिक नेस्टेड छवि विशेषता को लागू करने का उचित तरीका क्या है।

मैंने s3sh अमेज़ॅन एस 3 कंसोल चीज भी की, और हालांकि मैं एक छवि अपलोड नहीं कर सका क्योंकि मुझे पता नहीं चला कि खुले() फ़ंक्शन के दाहिनी छवि पथ में कैसे पास किया जाए, मैं S3 से कनेक्ट हुआ। मेरी s3.yml फ़ाइल भी सही ढंग से सेट की गई है।

धन्यवाद yall, ब्रायन

उत्तर

1

मुद्दा पोस्ट मॉडल

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

समस्या का समाधान हो इसे बाहर टिप्पणी के लिए accepts_nested_attributes में reject_if साथ था।

+0

अच्छा एक। धन्यवाद दोस्त :) –

+0

बस अगर कोई इसे पढ़ता है: केवल इस पृष्ठ को हटाएं: अस्वीकरण_फ => lambda {| t | टी [: post_image] .nil?} आप छोड़ सकते हैं: allow_destroy => सत्य अगर आप चाहते हैं कि छवि रिकॉर्ड हटा दिया जाए। –