質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

0回答

628閲覧

アプリの編集画面でimageのfailenameが受け取れない

fujimon01

総合スコア4

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2021/04/04 10:04

編集2021/04/04 11:59

オリジナルアプリ開発中の初学者です
確認に足りないソースがありましたらご連絡ください
どうぞよろしくお願いいたします

##目指すゴール
edit画面でimageを改めて選択しなくても、新規投稿の際洗濯した画像を保持したまま更新ができること

##問題点
今回
編集画面でimageのfileが受け取れていないため、
空禁止のバリデーションエラーメッセージが表示されます(Image can't be blank)
name属性にpost_tag[image]が生成されています
尚、新規投稿でimageを選択、保存をしています。

###やったこと
postとtagを同時に保存するためpost_tagモデルを作ったのが原因なのか?
SQLのJOINとONを用いてimageのfilenameを取得しvalue:変数として加えたが、ファイルを特に指定せず送信ボタンを押下すると同じく空禁止のバリデーションエラーメッセージが表示されます(Image can't be blank)

現在の画面

エラーが発生している編集画面

ruby

1class PostsController < ApplicationController 2 before_action :set_post, only: [:show, :edit, :update] 3 4 def edit 5 @form = PostsTag.new(title: @post.title, article_text: @post.article_text, status_id: @post.status_id, category_id: @post.category_id, user_id: current_user.id, post_id: @post.id) 6 end 7 8 def update 9 @form = PostsTag.new(update_params) 10 if @form.valid? 11 @form.update 12 redirect_to root_path 13 else 14 render :edit 15 end 16 end 17 18 private 19 20 def update_params 21 params.require(:posts_tag).permit(:title, :article_text, :status_id, :category_id, :image, :name).merge(user_id: current_user.id, post_id: params[:id]) 22 end 23 24 def set_post 25 @post = Post.find(params[:id]) 26 end 27end

html/edit.html.erb

ruby

1<%= form_with model: post, url: post_path, method: :put, local: true do |f| %> 2 <%= render 'shared/error_messages', model: f.object %> 3 4 //省略 5 6 <div class="field"> 7 <%= f.label :image, "投稿画像" %><br /> 8 <%= f.file_field :image, id:"post_image" %> 9 </div> 10  11   <div class="actions"> 12 <%= f.submit "保存する", class: :form__btn %> 13 </div> 14<% end %>

model/PostsTag.rb    

ruby

1class PostsTag 2 include ActiveModel::Model 3 attr_accessor :title, :article_text, :status_id, :category_id, :image, :name, :user_id, :post_id 4 5 with_options presence: true do 6 validates :title , length: {maximum: 20} 7 validates :article_text , length: {maximum: 300} 8 validates :status_id , numericality: {other_than: 1, message: "は--以外から選んでください"} 9 validates :category_id , numericality: {other_than: 1, message: "は--以外から選んでください"} 10 validates :name 11 validates :image 12 end 13 14 def save 15 post = Post.create(title: title, article_text: article_text, status_id: status_id, category_id: category_id, image: image, user_id: user_id) 16 tag = Tag.where(name: name).first_or_initialize 17 tag.save 18 19 PostTagRelation.create(post_id: post.id, tag_id: tag.id) 20 end 21 22 def update 23 @post = Post.where(id: post_id) 24 post = @post.update(title: title, article_text: article_text, status_id: status_id, category_id: category_id, image: image, user_id: user_id) 25 tag = Tag.where(name: name).first_or_initialize 26 tag.save 27 28 map = PostTagRelation.where(post_id: post_id) 29 map.update(post_id: post_id, tag_id: tag.id) 30 end 31end

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問