多様なイメージ属性を作成する方法に問題があると思われます。私はフォームに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
ファイルも正しく設定されています。
おかげでヤオール、 ブライアン
いいです。ありがとうございます:) –
誰かがこれを読んでいる場合にのみ:このページを削除してください:reject_if => lambda {| t | t [:post_image] .nil?}イメージレコードを削除する場合はallow_destroy =>のままにしておいてください。 –