画像をアップデートする時に、そのポストが保有するimage_name欄に、
そのポストのid.jpg(#{Post.id}.jpg)という名前を入れたいです。
Model
1=> #<Post id: 1, title: "新しい投稿", user_id: 1,image_name: "default_post.jpg",created_at: "xx", updated_at: "xx">
Post Modelは上記のようになります。
Controller
1 def create 2 @post = Post.new( 3 title: params[:title], 4 user_id: @current_user.id, 5 image_name: "default_post.jpg") 6 if @post.save 7 if params[:image_name] 8 @post.image_name = "#{@post.id}.jpg" 9 image = params[:image_name] 10 File.binwrite("public/#{@post.image_name}", image.read) 11 end 12 redirect_to("/posts/index") 13 else 14 render("posts/new") 15 end 16 end
Post Controllerは上記のようになります。
Post.newで、データを登録し、もしデータが登録された場合と続き、
if params[:image_name]では、もし画像の投稿があればというif文にしています。
上記の場合、Postのimage_nameに登録されるのが、"default_post.jpg"になります。
その部分に、"#{@post.id}.jpg"と入れると、データのセーブ前なのでかと思いますが、
undefined method `id' for nil:NilClass というエラーが出てしまいます。
Publicディレクトリ内に保存される画像の画像名はちゃんと"#{@post.id}.jpg"で保存されています。
質問内容がややこしくて申し訳ないです。
恐れ入りますが、ご教示頂ければ幸いです。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/19 05:15
2018/11/19 05:31
2018/11/19 05:40