6

多様なイメージ属性を作成する方法に問題があると思われます。私はフォームにfields_forを使用しています。 この場合、ユーザーはポストを作成してクリップを使用して画像を追加し、S3で保存することができます。Rails 3 + Polymorphic Imageモデル+ PaperclipとAmazon S3の設定、エラーはありませんがアップロードは何もなし

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属性を使用していますが、私はすべてを見てきましたが、多態的なネストされたイメージ属性を実装する適切な方法は何か分かりません。

アマゾンs3コンソールのものもありましたが、open()関数に正しい画像パスを渡す方法がわからないので画像をアップロードできませんでしたが、私はS3に接続しました。私のs3.ymlファイルも正しく設定されています。

おかげでヤオール、 ブライアン

答えて

1

問題は、Postモデルのためのaccepts_nested_attributesreject_if

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

とあったが、それをコメントアウトするには、問題を修正しました。

+0

いいです。ありがとうございます:) –

+0

誰かがこれを読んでいる場合にのみ:このページを削除してください:reject_if => lambda {| t | t [:post_image] .nil?}イメージレコードを削除する場合はallow_destroy =>のままにしておいてください。 –

関連する問題