htmlに乱数が表示されてしまう。(メモリの番地)


今回はselectメソッドを使って、htmlにプルダウンメニューを表示させようとした時に出た事象について記載する。結果としては、変数の文字の型は悪かった。

htmlにわからない値が表示される

下記の画面を見ていただけるとおり、訳がわからない値が表示されてしまう。
https://gyazo.com/774469a85bdb0708f730b090412ee9e7
これはインスタンス化した時やDBの値を参照した時に見える値だとわかる。
詳細は下記参考
>Category.all
FROM `categories`
=> [#<Category:0x007fe4d5b70540 id: 1, name: "調味料", created_at: Sun, 09 Jun 2019 10:21:56 UTC +00:00, updated_at: Sun, 09 Jun 2019 10:21:56 UTC +00:00>
上記の値はコンソール上に表示されるごとに変わる値だとわかる
ちょっと調べてみるとパソコンのメモリの場所が記されているみたい。。。

改善方法

なぜメモリの番地が表示されているかわかりませんでしたが、selectメソッドは第二引数を配列で返さないといけないことがわかる。
参考
http://railsdoc.com/references/select
失敗例
<%= f.select :category_id, @categories.each {|c| [[%W(#{c.name.to_s})],%W(#{c.id.to_i})]}, class: 'box' %>
色々と配列で行うやり方をやったができなかった。

collection_select

他に配列で返さないでできるメソッドを記載する。
<%= f.collection_select(:category_id, @categories, :id, :name, :prompt => "選択してください") %>
第一引数にfに返したいカラム(プロパティ名)、第二引数にプルダウンで表示させるオブジェクト(オブジェクトの配列), プルダウンの表示文字(value属性の項目), category_idに渡される値(テキストの項目)
で利用ができる。これにより、正常なプルダウンメニュー表示された。

いきなり訳がわからないものが出てきてだいぶ迷いましたが、メソッドの使い方をしっかりやらないとうまく動かないいい経験をしました。できれば値のクラスエラーが出てくれればもっと早く原因がわかったなと個人的には思いました。もし、メモリの番地の表示が出た時は、メソッドの使い方やクラスを疑いましょう。


この記事が気に入ったらサポートをしてみませんか?