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

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

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

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

Q&A

解決済

1回答

1155閲覧

f.selectにoption_for_selectでvalueに値を入れようとするとエラーが発生する。

atsu-ori2018

総合スコア5

Ruby on Rails

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

0グッド

0クリップ

投稿2020/06/14 18:16

編集2020/06/15 16:20

セレクトフォームを実装中

 セレクトタグのoptionのvalueにカテゴリーテーブルの配列を入れたインスタンス変数よりidを付与しようと以下のコードを書いたがエラーが出ました。。。

haml

1= f.select :category_id, options_for_select( @category_parent_array.map{|c| [c[:name], c[:id]]}),{prompt: "選択してください"}, { class: "parent_category_box", id: "parent_category"}

イメージ説明

こちらのエラーの解除がどうしてもわかりません。
どなたかお助けしていただけると本当に助かります。
お願いします。

追記

###items_controller.rb内の記述
以下が指摘いただいた@category_parent_arrayを定義しているコントローラの記述になります。
何卒よろしくお願いします!!!

def new @item = Item.new @item.images.new @parents = Category.all.order("id ASC") @category_parent_array = [] Category.where(ancestry: nil).each do |parent| @category_parent_array << parent.name end end def get_category_children category_children = Category.find_by(name: "#{params[:parent_name]}", ancestry: nil).children end def get_category_grandchildren @category_grandchildren = Category.find("#{params[:child_id]}").children end def create @item = Item.new(item_params) if @item.save redirect_to root_path else render "new" end end

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

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

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

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

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

guest

回答1

0

ベストアンサー

@category_parent_array が何者なのか? が問題です。
これを定義しているcontrollerを載せてください
それと map{|c| [0][c[:name]... の [0] は何者でしょう?

追記
@category_parent_array は name(文字列) の入った配列です。
その配列に対してmap{|c| [c[:name], としているので、「文字列の :name番目の文字を取り出す」という式になります。つまり[]の中は整数(に変換できるもの)が要求されるにちがうじゃん、というエラーです。

@category_parent_array = Category.where(ancestry: nil)
とすればよいかと。

options_from_options_for_select( @category_parent_array, :id,:name),...
としたほうがcompactかと。

投稿2020/06/14 21:37

編集2020/06/15 23:08
winterboum

総合スコア23567

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

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

atsu-ori2018

2020/06/15 16:23

おっしゃっていただいた@category_parent_arrayはancestryのparentとなる要素のnameを格納した配列になります。 コントローラー内の記述を付け加えております。よろしければこれでどのような解決方が考えられるか教えていただけますでしょうか。 ([0]の記述に関しては不要な記述でしたので削除しました。ありがとうございます。)
atsu-ori2018

2020/06/17 08:21

ご丁寧にありがとうございました! 確かにコントローラに文字列のnameのみを格納していたために出たエラーだったようでした。 配列を@category_parent_array = Category.where(ancestry: nil)に変えたところうまく動作しました。 教えていただいてとても簡単なことでしたがここに時間をだいぶ費やしてしまいました。。。 どうもありがとうございます! 今後ともよろしくお願いします!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問