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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

569閲覧

railsでデータベースに保存したものが表示できない

sawasawanosawa

総合スコア4

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2021/05/31 03:37

やりたいこと

データベースに保存されている文章や画像をhtml上に表示したい。
現状、エラーは発生しておりません。
コントローラかビューのどちらかに問題があるのだろうと考えているのですが、見つけられませんでした。

環境

ruby :2.6.3
ruby on rails :5.0.7.2
carrierwave :1.3.1

コード

index.html.erb

<h1>一覧画面</h1> <% @posts.each do |post| %> <%= post.content %> <%= image_tag post.img.url if post.img? %> <% end %>

posts_controller.rb

class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) @posts = Post.where(id: params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save flash[:notice] = "投稿しました" redirect_to("/posts/index") else flash[:notice] = "文字数を140字以内にしてください" render("posts/new") end end def like end def post_params params.permit(:content, :img) end end

###データベース
データベース内に保存してあるもの

sqlite> .schema posts CREATE TABLE "posts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "content" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL, "title" varchar, "img" varchar); sqlite> select * from posts; 1|あfds|2021-05-30 11:25:30.082329|2021-05-30 11:25:30.082329|| 2|あ|2021-05-30 11:40:56.891927|2021-05-30 11:40:56.891927|| 3||2021-05-30 15:07:46.033794|2021-05-30 15:07:46.033794|| 4||2021-05-30 15:08:03.649756|2021-05-30 15:08:03.649756|| 5|sssss|2021-05-30 18:15:34.161435|2021-05-30 18:15:34.161435||something.jpg 6|aaaaaa|2021-05-31 01:55:29.505669|2021-05-31 01:55:29.505669||something.jpg 7|aassadhf|2021-05-31 02:01:22.665429|2021-05-31 02:01:22.665429||something.jpg

このうち、3と4はデータが入っていないので表示されないのは当然だと思うのですが、それ以外も表示できません。

一応、rails consoleで5の文章を表示させたところ、

2.6.3 :002 > Post.all[4].content Post Load (0.1ms) SELECT "posts".* FROM "posts" => "sssss"

と表示されるので、データベースに保存自体はできていると考えています。

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

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

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

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

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

m.ts10806

2021/05/31 04:07

どのように:idを指定しindexメソッドを実行されてるのでしょうか。 また、allを指定している方だけでは取れませんか?
sawasawanosawa

2021/05/31 07:41 編集

@posts = Post.where(id: params[:id])を消してしまうとindex.html.erbにて(undefined method `each' forエラー)→正しくはundefined method `url if' for #<ImgUploader:0x000000000532dc50>のエラーです。が出てしまうため追加しました。 そのため、@posts = Post.all.order(created_at: :desc)のみだとトップページでエラーが出てしまいます。 こちらを参考にしました。 https://qiita.com/tanaka7014/items/f1c4b6505a2c672ea1f7
winterboum

2021/05/31 06:37

Post.all でエラーが出るのが不思議です。 `each' for の先にはなにが書かれていましたか?
sawasawanosawa

2021/05/31 07:39

お騒がせしてすみませんでした。 @posts = Post.where(id: params[:id])の追加は、 eachのエラーではなく、正しくはurlのエラーでした。 NoMethodError in Posts#index Showing /home/ec2-user/environment/gamesnap/app/views/posts/index.html.erb where line #6 raised: undefined method `url if' for #<ImgUploader:0x000000000532dc50> Extracted source (around line #6): <% @posts.each do |post| %> <%= post.content %> <%= image_tag post.img.url if post.img? %> <% end %> eachのエラーは、間違えてPost.allの下に@post = Post.newと記述してしまったために起こったエラーです。 undefined method `each' for #<Post:0x00007fa9207944a8>
guest

回答1

0

ベストアンサー

エラーメッセージをよく読みましょう。url if となっていて、urlがないと言っているのではないです。おそらく lとiの間が全角スペースなのでしょう。
@posts = Post.where(id: params[:id]) の追加でそのエラーがなくなったのは、indexを呼ぶときに params に id が渡ってきていないので、@postsが空になり、eaachが実行されない => url if を通らなかった、ためです。

で、
そこを半角空白になおし、
@posts = Post.where(id: params[:id]) を削除すれば表示されるでしょう。

投稿2021/05/31 09:33

winterboum

総合スコア23567

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

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

sawasawanosawa

2021/05/31 10:30

ありがとうございます。 解決いたしました。 winterboumさんのおっしゃる通り、全角スペースが混じっていました。 全角スペースを可視化する設定にし、もっと注意深くエラーメッセージを見ることに気を付けたいと思います。 初歩的なミスに気付かず混乱してしまいました。 本当に助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問