前提・実現したいこと
Twitterのような投稿アプリを作成しています。
画像を投稿してデータベースに保存してからhtmlで表示したいと思っています。
始めは成功していたのですが、二回目以降の投稿に付けた画像も別のファイルを選択したにも関わらず表示の段階で初めのものと同じになってしまいました。
データベースを消去してやり直しましたがうまくいきません(つまり、どこにもないはずのデータが表示されています)。
初心者故初歩的なことかもしれませんが、原因がわかる方ご教授をお願い致します。
該当のソースコード
routes.rb---------------
get "posts/index" => "posts#index"
get "posts/new" => "posts#new"
get "posts/:id" => "posts#show"
post "posts/create" => "posts#create"
get "posts/:id/edit" => "posts#edit"
post "posts/:id/update" => "posts#update"
post "posts/:id/destroy" => "posts#destroy"
posts_controller.rb------------
def create
@post = Post.new(
content:params[:content],
user_id: @current_user.id,
prefecture:params[:prefecture],
category:params[:category],
with:params[:with]
)
if params[:image]
@post.image_name = "#{@post.id}.jpg"
image = params[:image]
File.binwrite("/home/vagrant/tweet_app/public/post_images/#{@post.image_name}",image.read)
end
if @post.save
flash[:notice] = "旅行記を作成しました!!"
redirect_to("/posts/index")
else
render("posts/new")
end
end
show.html.erb-------------
<div class="main posts-show"> <div class="container"> <div class="posts-show-item"> <div class="post-user-name"> <img src="<%="/user_images/#{@user.image_name}"%>"> <%= link_to(@user.name,"/users/#{@user.id}") %> </div> <div class="post-image"> <img src="<%="/post_images/#{@post.image_name}"%>"> </div> <p> <%= @post.content %> </p></div><div class="post-time"> <%= @post.created_at %> </div> <div class="post-information"> <%= @post.prefecture %> <%= @post.category %> <%= @post.with %> </div> <% if Like.find_by(user_id: @current_user.id,post_id: @post.id) %> <%= link_to("/likes/#{@post.id}/destroy",{method:"post"}) do %> <span class="fa fa-heart like-btn-unlike"></span> <% end %> <% else %> <%= link_to("/likes/#{@post.id}/create",{method:"post"}) do %> <span class="fa fa-heart like-btn"></span> <% end %> <% end %> <%= @likes_count %> <% if @user.id == @current_user.id %> <div class="post-menus"> <%= link_to("編集", "/posts/#{@post.id}/edit") %> <%= link_to("削除", "/posts/#{@post.id}/destroy",{method:"post"}) %> </div> <% end %> </div>
### 試したこと 以下のことを試しましたが状況は変わりませんでした ・rails db:drop → rails db:migrate ・一度作成したPostテーブルのimage_nameカラムを消去し再作成 また、 ・rails console → Post.all で情報を取得したところ、すべての投稿のimage_nameの値が.jpgになっていました。 そこでpost_images内を確認すると.jpgが作成されており、開くと文字化けした文章が出てきました。 これが原因かもしれないとは思うのですが、どうやって直したらよいかわかりません・・・。 一日中試行錯誤しましたがわからなかったので質問させて頂きます。 足りない情報等ありましたらコメントを頂ければ幸いです。 ご教授の程、よろしくお願い致します。
あなたの回答
tips
プレビュー