(Rails)コントローラでクエリパラメータを取得できない

アプリ制作

実現したいこと

  • コントローラでクエリパラメータを取得したい

つまづいたところと解決法

  • コントローラでbinding.pryを起動してpramasにアクセスしようとしたが、NameError: undefined local variable or method `params'と出てしまう。
  • クエリパラメータの書き方におかしいところがないか、クエリパラメータへのアクセスの仕方を英語で検索し、記事を4つほど読み込んだ。
  • ふとbinding.pryの位置がおかしいのかもと頭に浮かび、試してみたところ解決した.。
# リクエスト
/statistics?column=activity&date_begin=2019-09-12&date_end=2019-09-21

# routing
get 'statistics' to: statistics#report

# app/controllers/statistics_controller
class StatisticsController < ApplicationController
  #省略
  binding.pry
  
    #省略
  def report
  #省略
  end
end 

# paramsを参照できない

[1] pry(StatisticsController)> params 
NameError: undefined local variable or method `params' for        StatisticsController:Classfrom (pry):1:in `<class:StatisticsController>'
  • よくよく見るとデバッガの位置を間違えていた。

    • ルーティングで`statistics => statistics#reportなので、reportメソッドの名前空間からでないとparamsにアクセスできない?
    • ここらへんの仕組みが理解できていない。
# app/controllers/statistics_controller
;
(省略)
def report
  binding.pry
  #省略
end 

# paramsを取得できた
[1] pry(#<StatisticsController>)> params
=> <ActionController::Parameters {"column"=>"activity", "date_begin"=>"2019-09-12", "date_end"=>"2019-09-21", "controller"=>"statistics", "action"=>"report"} permitted: false>

プロを目指す人のためのRuby入門

  • 7章クラスの作成を理解する
    • 7.1 イントロダクション
    • 7.2 オブジェクト指向プログラミングの基礎知識
    • 7.3 クラスの定義
    • 7.4 例題: 改札機プログラムの作成