やりたいこと
データベースに保存されている文章や画像を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"
と表示されるので、データベースに保存自体はできていると考えています。
どのように:idを指定しindexメソッドを実行されてるのでしょうか。
また、allを指定している方だけでは取れませんか?
@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
Post.all でエラーが出るのが不思議です。
`each' for の先にはなにが書かれていましたか?
お騒がせしてすみませんでした。
@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>
回答1件
あなたの回答
tips
プレビュー