質問: [ {"name"=>"もも肉", "data"=> @smomoarray }, {"name"=>"むね肉", "data"=> @smunearray }, {"name"=>"とたい", "data"=> @stotaiarray } ] end と、入力されています。今のこの状態ではグラフは表示されていてうまく動いているようです。 また、12.month のところの 12 を 24 にしたり、60 にしたりしてもうまく動いています。 ここで、このラジオボタンの変数@term を、(Time.now - 12.month)..Time.now) の 12 の所に入るようにしたいので、@term と書き換えると、 NoMethodError in HomesController#show undefined method `month' for nil:NilClass という、エラーで進まなくなって しまいました。今日一日かけて探しましたが、解決方法はわかりませんでした。 どなたか教えていただけますでしょうか。よろしくお願い致します。
回答: `homes_controller.rb`を以下のように書き換えたらエラーが出たということでしょうか? ``` def show @admin_charts = Admin::Chart.all @smomoarray = Admin::Chart.where(keisaiday: (Time.now - @term.month)..Time.now).where('smomo is not 0').pluck(:keisaiday, :smomo) @smunearray = Admin::Chart.where(keisaiday: (Time.now - @term.month)..Time.now).where('smune is not 0').pluck(:keisaiday, :smune) @stotaiarray = Admin::Chart.where(keisaiday: (Time.now - @term.month)..Time.now).where('stotai is not 0').pluck(:keisaiday, :stotai) @graph_data3 = [ {"name"=>"もも肉", "data"=> @smomoarray }, {"name"=>"むね肉", "data"=> @smunearray }, {"name"=>"とたい", "data"=> @stotaiarray } ] end ``` 発生している状況は以下の通りです。(RailsというよりWEBアプリの基本的な流れになります) * ブラウザからURLリクエスト * サーバ側でURLに対応するコントローラのメソッド呼び出し(設定が間違っていなければ`homes#show`) ⇒この時点で`@term = nil`なのでエラーになります。 ログを見ていれば@termがnilだからエラーになっていることは分かっていると思います。@termへの値の設定はどのように行われることを想定されていたのでしょうか? 質問の文面からは `homes/show.html.erb` が最初に処理されて表示されることを想定しているような印象を受けますが、そうであればまず、自分が思った通りに動いているかどうかを確認するために、各所にデバッグプリントを挿入して、ログを読むと良いです。 処理の順序がコントローラ⇒テンプレートということが分かれば、コントローラ内で@termを設定すべきことが分かると思います。 また、フォームで選択した値を渡したいという要求もあることから、リクエストパラメータから値を取得して@termに設定し、リクエストパラメータが無かったら初期値を設定するという処理を入れればよいということが分かります。 次は、リクエストパラメータから値を取得するにはどうすればよいかを調べることになりますが、この程度のことであればググればいくらでも情報は見つかります。(showメソッドではなくeditメソッドでform_forを使用する) 目の前にある手がかりをよく見て、きちんと考えて少しずつ調べていけば問題は解決できます。