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

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

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

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

481閲覧

投稿された画像を保存して表示しようとしても同じ画像しか表示されません

aiskrai

総合スコア8

Ruby

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

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2020/04/19 13:13

前提・実現したいこと

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 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>
</div>
### 試したこと 以下のことを試しましたが状況は変わりませんでした ・rails db:drop → rails db:migrate ・一度作成したPostテーブルのimage_nameカラムを消去し再作成 また、 ・rails console → Post.all で情報を取得したところ、すべての投稿のimage_nameの値が.jpgになっていました。 そこでpost_images内を確認すると.jpgが作成されており、開くと文字化けした文章が出てきました。 これが原因かもしれないとは思うのですが、どうやって直したらよいかわかりません・・・。 一日中試行錯誤しましたがわからなかったので質問させて頂きます。 足りない情報等ありましたらコメントを頂ければ幸いです。 ご教授の程、よろしくお願い致します。

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

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

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

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

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

hoshi-takanori

2020/04/21 06:22

Rails よく分かってませんが、@post = Post.new() した直後に @post.image_name = "#{@post.id}.jpg" というファイル名で画像を保存してますが、@post.id が未設定なので ".jpg" というファイル名になって毎回上書きされるのでしょう。@post.save した後に @post.id を使って保存すれば毎回違うファイル名になると思います。
aiskrai

2020/04/23 10:04

お返事遅くなりまして申し訳ありません。 お教え頂いた方法で無事解決することができました! 本当にありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問