2019年8月17日土曜日

recent メソッドが見つからない…?(Ruby on Rails 5 速習実践ガイド)

Ruby on Rails 5 速習実践ガイドで躓いたところ。

Chapter 7-2で、本の記述に従って下記を tasks_controller に追加したところ、

@tasks = @q.result(distinct: true).recent

index を開こうとするとエラーが発生。

NoMethodError in TasksController#index
undefined method `recent' for #<Task::ActiveRecord_AssociationRelation:0x00007f8298add2d0> Did you mean? reject reset

調べてみたところ、この .recent は Ruby や Rails、または ransack gem で用意されているメソッドではない様子。

「rails .recent メソッド」で検索して下記ページに行き当たり、これはScopeなのでは?と思い当る。

Railsでよく利用する、Scopeの使い方。 - Qiita
https://qiita.com/ngron/items/14a39ce62c9d30bf3ac3

本の索引からScopeのページを探して見返すと、P. 178 に下記の記載が。

  scope :recent, -> { order(created_at: :desc) }

このページを読んだ時点では「たとえば次のように ... 使うことができます」としていくつか使い方の例が挙げられているだけだったので、この scope が後々必要になるとは思わず、追加していなかったことが原因でした。

app/models/task.rb にこの scope を追加すると期待通り動作するようになりました。


参考・引用元: 現場で使える Ruby on Rails 5速習実践ガイド | マイナビブックス

0 件のコメント:

コメントを投稿