質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

4254閲覧

Arel::Visitors::UnsupportedVisitErrorで困っています

tuvalu

総合スコア136

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2016/08/19 08:43

###前提・実現したいこと
Ruby on Rails 5.0.0 と chartkick で、チャートを表示しようとしています。
単純な表示はできたので、条件指定による表示にトライしています。

セレクトボックスで商品(@niku)を選択、ラジオボタンで期間(@term)を選択し、
取得したインスタンス変数を、method: "post" で、 controller に飛し、
params[: ]で、受けた変数を処理したいコードに代入して表示させようとしています。

###発生している問題・エラーメッセージ
この作業を編集しながら保存し、グラフ表示ボタンを押すとうまく動くのですが、
ブラウザの再読込みを押した途端、エラーになります。

エラーメッセージ Arel::Visitors::UnsupportedVisitError in ChartsController#show Unsupported argument type: NilClass. Construct an Arel node instead.

###該当のソースコード

chart_controller.rb def show item = params[:@niku] t = params[:@term].to_i d = Date.new((params[:@nen]).to_i, (params[:@tuki]).to_i, 1) @smomoarray = Admin::Chart.where(keisaiday: d..(d + t.month)).where('smomo is not 0').pluck(:keisaiday, item)

###試したこと
元のコードに戻すとエラーはなくなり画面も表示される。しかし、(あたりまえだけど)
商品や期間は選べない。

def show item = params[:@niku] t = params[:@term].to_i d = Date.today @smomoarray = Admin::Chart.where(keisaiday: (d - t.month)..d).where('smomo is not 0').pluck(:keisaiday, :smomo)

###推測
検索してもなかなか見つからない見慣れないエラーだが、ページ読み込み時にpost
されるデータが、まだなにも決まってなく送られていない状態なので、Nilclassのエラー
が出ているのかな。

###もし推測があっているとしたら
もし推測があっているとしたら、ページの読み込み時に、セットしておいたデフォルト値を
post してエラーを回避したい。

###質問
ページ読み込み時に post したい変数をデフォルト値として設定しておいてポストする
ことはできますか?
できるとすると、どこをどのようにすればいいですか?
質問ばかりで申し訳ありませんが、教えてください。よろしくお願い申し上げます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

おそらく、params[:@niku]がnilの時に、pluckの引数として渡すオブジェクトが空で問題ありなのではないかと思います

存在チェックを掛けて、空の場合はデフォルトを渡せば良いかと

Ruby

1item = params[:@niku].present? ? params[:@niku] : :sumomo

p.s.
独特な命名法ですね・・・[:@niku]

投稿2016/08/19 09:57

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuvalu

2016/08/19 10:26

ありがとうございます。完璧です。 あのあと、そうか、ここで if 文だ、と(プログラミング4月からの初心者なんです) item = params[:@niku] if item == nil item = :smomo としたところ、エラーは出なくなり、画面も表示されるようになったのですが、 今度は、それまでできていたクエリメソッドを処理しなくなって途方に暮れていた ところでした。完璧です!ありがとうございます。失礼致します。
tuvalu

2016/08/19 10:29

[:@niku] お肉の部位を選択して相場をチャートにするのにトライしています!その niku です。。ありがとうございました!
rifuch

2016/08/19 14:27

いや、ハッシュのキー名に@の記号を使うのが珍しいです。 インスタンス変数と混同しやすいので、普通使わないので。
tuvalu

2016/08/20 05:47

あれ?変ですか・・? 実はよくわかってないんです。。 はずしてみます。。
guest

0

引数にnilが入ってて、それがエラーを引き起こしているのですが、
単純にパラメータの取り方が間違ってるんでは?

params[:@niku]じゃなくて、params[:niku]ではありませんか?

投稿2016/08/19 08:53

rifuch

総合スコア1901

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tuvalu

2016/08/19 09:25

ああ、そこのところは大丈夫です。変更前はうまく動いていますし、 変更後も、ページをリフレッシュするまでは動いています。 問題は初期の読込みのところだと思います。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問