前提・実現したいこと
fields_forを使い、コメントに紐づいた画像を登録がしたいです。(carrier_wave使用)
今のところ、テキストのみを入力すると登録ができるのですが、画像を選択すると登録ができません。
関連するモデルはgroup, comment, group_imagesの3つで
group : comment = 1 : n
comment : comment_images = 1 : n
となっております。
routes.rb
root 'groups#index' resources :groups, only: [:index, :create] do resources :comments, only: [:index, :create] end
[comments.controller]
def index @group = Group.find(params[:group_id]) @comment = Comment.new @comment.comment_images.build end def create @comment = Comment.new(comment_params) @comment.save end private def comment_params params.require(:comment).permit( :text, comment_images_attributes:[:src]).merge(group_id:params[:group_id]) end
[views/comments/index.html.haml]
= form_with model: [@group, @comment] do |f| = f.text_field :text = f.fields_for :comment_images do |f| = f.file_field :src = f.submit "投稿"
以下が各モデルの記述です。
class Comment < ApplicationRecord belongs_to :group has_many :comment_images accepts_nested_attributes_for :comment_images validates :text, presence: true, length: {maximum: 100} end
class CommentImage < ApplicationRecord belongs_to :comments mount_uploader :src, ImageUploader end
class Group < ApplicationRecord has_many :comments accepts_nested_attributes_for :comments validates :title, presence: true, length: {maximum: 30} end
試したこと
createアクション下でbinding.pryを使用したところ、paramsは以下のようになっていました。
<ActionController::Parameters {"text"=>"コメント", "comment_images_attributes"=><ActionController::Parameters {"0"=><ActionController::Parameters {"src"=>#<ActionDispatch::Http::UploadedFile:0x00007fc7b36baaa8 @tempfile=#<Tempfile:/var/folders/xx/qqfyfc5s5tb7_52jdnqgdf8c0000gn/T/RackMultipart20200912-18626-rf4n0f.jpg>, @original_filename="beatles2.jpg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"comment[comment_images_attributes][0][src]\"; filename=\"beatles2.jpg\"\r\nContent-Type: image/jpeg\r\n">} permitted: true>} permitted: true>, "group_id"=>"4"} permitted: true>
また、他モデルでの画像投稿はできたので、carrierwaveの導入は問題ないと思います。
初歩的質問ですがよろしくお願いします…!
あなたの回答
tips
プレビュー