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

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

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

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

Q&A

解決済

1回答

630閲覧

【Ruby on Rails 】ユーザー一覧ページ内に、ユーザーごとに、最新のつぶやきが一件ずつ表示されるようにしたいです

yujico

総合スコア25

Ruby on Rails

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

0グッド

0クリップ

投稿2019/01/28 06:00

編集2019/01/28 06:05

前提・実現したいこと

Railsの学習として、ツイッターぽいアプリを作成中です。

ユーザー一覧ページ(users#index)のデータ出力として、
usersテーブルの情報の他に、そのユーザーがつぶやいた最新一件の内容をpostsテーブルからひっぱってきて表示させたいと思っているのですがエラーが発生してしまっています。

Model
◾️Post(つぶやき情報)
postのフィールド id, content, user_id...

◾️User(ユーザー情報)
Userのフィールド id, name,...

View
users/index.html.erb

erb

1<ul> 2 <% @users.each do |user| %> 3 <li> 4 <%= link_to("/users/#{user.id}")do %> 5 <%= user.name %> 6 <br> 7 <%= user.comment %> 8 <br> 9 <%= user.lastpost.content %> 10 11 <% end %> 12 </li> 13 <% end %> 14</ul>

lastpostのUserモデル内インスタンスメソッド

#user.rb class User < ApplicationRecord def lastpost return Post.where(user_id: self.id).first(1) end end

users-controllerの該当箇所

def index @users = User.all end

発生している問題・エラーメッセージ

NoMethodError in Users#index undefined method `content' for #<ActiveRecord::Relation []>

lastpostのcontentメソッドが定義されていないとのことなので、インスタンスメソッド周りでミスがあるのでしょうか?
ご教授いただけると助かります。

補足情報(FW/ツールのバージョンなど)

Rails 5.2.2
vagrant Centos6.8

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

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

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

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

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

guest

回答1

0

ベストアンサー

lastpostの返り値が空っぽの場合に、contentを呼べないのでエラーが発生しています。
まだ1件もつぶやいていないユーザーが居るために発生するエラーかと思います。

<%= user.lastpost.try(:content) %>

のようにすれば解決するかと思います。

その他lastpostが最新1件という仕様を満たせていなかったり、lastpostはself.postsで取得できるようにするべきだったりしますが、実装途中かと思い割愛。

投稿2019/01/28 06:44

--KT--

総合スコア90

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

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

yujico

2019/01/28 06:55

ありがとうございます! tryメソッドを使うのですね。 該当箇所を修正したところエラーは出なくなりましたので、おそらくこの箇所についてはエラーが解消されたものと思われます。 おっしゃる通り、それ以外の部分の実装が途中のため、表示がまだおかしいですが、 どうしてもわからなかったらまたteratailで質問させていただこうと思います。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問