LoginSignup
18
24

More than 5 years have passed since last update.

undefined method `each' forエラー 備忘録

Posted at

<% post.each do |p| %>

<%= p.text %>

みたいな感じでeach文を回して要素を一つずつ表示した際に
undefined method `each' for というエラーが発生

エラーの原因

post.eachのpostにpostオブジェクトが渡されていたこと

eachは配列の要素の数だけブロックを繰り返し実行する

すなわち、postオブジェクトの配列を渡してあげれば解決

流れ

posts_contorller.rb
@post = Post.find(params[:id])

パラメーターで送られてきたpostをfindで取り出して@postへ代入

qiita.rb
<%= render partial: 'posts/post', locals: { post: @post } %>

@postを部分テンプレート先でpostというローカル変数で使用

qiita.rb
<% post.each do |p| %>

postをpへ代入して要素の数だけ表示

修正部分

before

posts_contorller.rb
@post = Post.find(params[:id])

findメソッドは条件に合致するオブジェクトを取り出す

after

posts_contorller.rb
 @post = Post.where(id: params[:id])

whereメソッドは条件に合致するオブジェクトを配列として取り出す

要するにeachには配列を渡しましょうということです

参考

teratail
ruby リファレンス

18
24
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
24