1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【初心者】railsのアソシエーションを利用したカラムの表示でハマった話

Posted at

テーブルの構成

  • groupsテーブル
  • messagesテーブル

アソシエーション

  • groups : has_many :messages
  • messages : belongs_to :group

したかったこと

特定のグループの最新メッセージをアソシエーションを利用して取得したい。

上手くいかなかったコード

messages_controller.rb
#略
  def index
    #略
    @latest_massage = @group.messages.order(updated_at: :desc).limit(1)
  end
  #略
  def set_group
    @group = Group.find(params[:group_id])
  end
index.html.erb
  #略
  @latest_message.content

出力結果 → NoMethodError

contentを取り出せたコード

index.html.erb
  #略
  @latest_message[0].content

学んだこと

  • @group.messages.order(updated_at: :desc).limit(1)では、まだメッセージは配列に格納されたハッシュのままなので、.contentで取り出すためには、要素の指定がいる。配列に格納された状態ではゲッターメソッドは使えない。
  • order(updated_at: :desc).limit(1)を使わなくても、最新メッセージを取得するのであれば、@group.messages.last.contentとするのが手っ取り早い。
  • contentを取り出すだけなら、eachメソッドに@group.messagesを渡して順番に取り出せる。
1
0
0

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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?