前提・実現したいこと
Railsアプリで投稿した画像をデータベースに記録させたいです。
https://github.com/mkakiz/tadakashi_app
発生している問題
以下のコントローラで投稿を行っています。
(posts_controller.rb) def create @post = Post.new( content: params[:content], user_id: @current_user.id ) if @post.save #DB保存して、@post.id発行 if params[:image] @post.post_image_name = "#{@post.id}.jpg" image = params[:image] File.binwrite("public/post_images/#{@post.post_image_name}", image.read) end flash[:notice] = "投稿を作成しました" redirect_to("/posts/index") else render("posts/new") end end
実行後にRails Consoleで投稿を見ると、投稿画像のカラムがnilとなっています。
<Post id: 9, content: "cat pic", created_at: "2020-03-29 23:37:23", updated_at: "2020-03-29 23:37:23", user_id: 1, post_image_name: nil>]>
ユーザー画像をアップデートするときも同じように書いてますが、こちらは正常に動きます。
def update @user = User.find_by(id: params[:id]) @user.name = params[:name] @user.email = params[:email] if params[:image] @user.image_name = "#{@user.id}.jpg" image = params[:image] File.binwrite("public/user_images/#{@user.image_name}", image.read) end if @user.save flash[:notice] = "ユーザー情報を編集しました" redirect_to("/users/#{@user.id}") else render("users/edit") end end
アプリに画像が保存はされているようです。
app/public/post_images/9.jpg
データベースは以下のように設定されています。
create_table "posts", options: "ENGINE=InnoDB DEFAULT CHARSET=utf8", force: :cascade do |t| t.text "content" t.datetime "created_at", null: false t.datetime "updated_at", null: false t.integer "user_id", null: false t.string "post_image_name" end
postsテーブルのpost_image_nameに記録されると思っているのですが、上手くいってません。
すみませんがアドバイスを頂けないでしょうか。
よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/03/30 02:08
2020/03/30 02:14
退会済みユーザー
2020/03/30 02:33