複数画像を別レコード扱いにした際にMiniMagickを使うとundefined method `tempfile' になる
Q&A
Closed
解決したいこと
- Railsでプライベートな画像アップローダーを作成中です
- file_fieldで複数画像を添付した場合、それぞれを別レコードとして保存する仕様にしたいです(画像にタグ付けしまくるコンセプトなので)
- ActiveStorage経由でMiniMagickを使ってます
- 他の方法でいけそうならそれでもOKです
発生しているエラー
NoMethodError in PostsController#create
undefined method `tempfile' for ["", #<ActionDispatch::Http::UploadedFile:0x000000010fd0b000
@tempfile=#Tempfile:/var/folders/xy/xfg7t3952yqfz87kmgvkh2jr0000gn/T/RackMultipart20230626-44964-lmccik.jpg>,
@content_type="image/jpeg",
@original_filename="1.jpg",
@headers="Content-Disposition: form-data; name=\"post[images][]\"; filename=\"1.jpg\"\r\nContent-Type: image/jpeg\r\n">]
:Array
該当するソースコード
_form.html.erb
<%= form_with(model: post) do |form| %>
<div>
<%= form.label :images, style: "display: block" %>
<%= form.file_field :images, multiple: true %>
</div>
<div>
<%= form.label :comment, style: "display: block" %>
<%= form.text_area :comment %>
</div>
<div>
<%= form.submit %>
</div>
<% end %>
posts_controller.rb
def create
params[:post][:images].each do |image|
image.tempfile = ImageProcessing::MiniMagick
.source(params[:post][:images].tempfile)
.resize_to_limit(1024, 768)
.strip
.call
@post=Post.new(
images:image,
user_id: @current_user.id,
comment:params[:post][:comment]
)
@post.save
end
redirect_to "/#{@current_user.name}"
end
post.rb
class Post < ApplicationRecord
has_many_attached :images
end
自分で試したこと
.source(params[:post][:images].tempfile)
を
.source(image.tempfile)
にすると、
undefined method `tempfile' for "":String
のエラーになります。
0