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 件のコメント:
コメントを投稿