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

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

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

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

Ruby on Rails

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

Q&A

1回答

2286閲覧

railsのeachのエラーについて

soft_admin

総合スコア63

Ruby

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

Ruby on Rails

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

0グッド

1クリップ

投稿2019/08/21 03:32

railsのview上でeachを使用してループ処理を行いたいのですが、エラーが発生しました。

ruby

1 <% if !@db_record.nil? %> 2 <% @db_record.each do |record| %> 3 4 ~ 略 ~ 5 6     <% end %> 7 <% end %>

エラーの内容は、

NoMethodError in [controller]#[action]
Showing [上記のhtml.erbファイル] where line #2 raised:

undefined method `each' for #Message:0x00005606d8244138

です。

2行目の<% @db_record.each do |record| %>でエラーが発生しているようなのですが、理解ができません。
@db_recordはnilではなく、dbから取得した値がっ入っています。

どなたかご教授いただけますか?

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

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

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

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

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

gouf

2019/08/25 12:31

解決した場合、回答者の回答か自分で内容をまとめた回答をベストアンサーに設定することで、この質問を解決済みにすることができます
guest

回答1

0

エラーメッセージの通りMessageインスタンスにeachメソッドが存在しないからです。
@db_recordを用意している箇所をもう一度見直してみてください。

投稿2019/08/21 03:39

Mugheart

総合スコア2340

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

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

soft_admin

2019/08/21 03:52 編集

確認しましたが、やはりデータが入っています。 位置行目のnilチェックでも確認しています。
Mugheart

2019/08/21 03:53

データが入っていたらeachが使えるとかそういう話では無いです。 データがあろうがなかろうがMessageインスタンスに対してeachメソッドは存在しないので使えません。
Mugheart

2019/08/21 03:54

ActiveRecord_Relationとごっちゃになっていませんか?
soft_admin

2019/08/21 03:55

どういうことでしょうか?@db_recordにはactiverecordで取得したDBのデータが入っているのですが、ループできないということでしょうか?そんなはずはないと思うのですが...
Mugheart

2019/08/21 03:56

埒が明かないのでその部分のコードを見せていただけますか?
soft_admin

2019/08/21 04:06

controller @db_record = Message.get_message(id) model def get_message(id) db_record = Message.order(id: "DESC").limit(20).find_by("id = ?", id) return db_record end こういった感じです
Mugheart

2019/08/21 04:09

db_record は 最後の .find_by("id = ?", id) で取得した単一レコードであって ActiveRecord_Relation(レコードの配列)では無いことは理解していますか? eachメソッドは独自定義していない限り、配列もしくはハッシュに対してしか使えません。 単一レコード(Messageインスタンス)は配列でもハッシュでもないです。
Mugheart

2019/08/21 04:11

db_record = Message.order(id: "DESC").limit(20).where("id = ?", id) とすればeachが使えます(これがやりたいことと一致しているかはわかりませんが)。
Mugheart

2019/08/21 04:12

略されていますが、eachのなかで何をしたいか次第ですね。
soft_admin

2019/08/21 04:19

すみません、ActiveRecord_Relationについてよく分かっていないです。 調べてみます。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問