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

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

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

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

3回答

4549閲覧

配列内の値の取得方法

beginer

総合スコア21

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2015/09/22 02:12

View側のformでsubmitをしてコンソールで確認をすると以下のParametersが渡されていることがわかります。
Parameters: {"utf8"=>"✓", "authenticity_token"=>”xxxxxxxxx==", “test"=>{"name"=>”Taro", “address_attributes"=>{"0"=>{ “post"=>”1600000", "_destroy"=>"false"},"1442884374698"=>{ “post"=>”1700000", "_destroy"=>”false”}}

そしてControllerで値を印字するプログラムを書きました。
p params[:test][:name] #=> Taro

ここでわからないのは、authenticity_tokenの中身です。

p params[:test][:authenticity_token][0]
と記述してもnilになってしまい、取得できません。

"address_attributes"の中身を取得するためにはどのように記述するべきなのかご教授願います。

(nice to have)
また、ググる場合はなんと検索するべきなのでしょうか。
私は、「rails params 配列 取得」などで調べたのですが、なかなか理解できる内容にたどり着けませんでした。

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

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

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

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

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

guest

回答3

0

試せる環境がないので、間違っていたらゴメンなさい…

取り出したいのは、"1600000"や"1700000"

とのことですので、以下のようにすると良いのではないでしょうか?

// "1600000" を取り出す場合 params.permit(:test => {:address_attributes => {:0 => {:post}}}) // "1700000" を取り出す場合 params.permit(:test => {:address_attributes => {:1442884374698 => {:post}}})

また、

また、ググる場合はなんと検索するべきなのでしょうか。

とのことですが、自分は「rails parameters controller」という検査キーワードで こちら のページに辿り着きました。(「ネストしたパラメータ」の項をご参照ください)

ググる場合のちょっとしたコツですが…

  • まずは主だったキーワード2つか3つを指定して検索してみる
  • Googleが提示してくる「おすすめ」のキーワードを使って検索してみる
  • 検索結果があまり思わしくない場合でも、検索結果の上位の「プレビュー」を見て、検索に使えそうなキーワードがあれば参考にする
  • キーワードを追加したり削ったりしながら検索結果を見る
  • キーワードの順序を変えてみる

といった工夫をすると、結構な確率で知りたい情報を見つけ出すことができます。
以上、ご参考まで。

投稿2015/09/22 10:58

pi-chan

総合スコア5936

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

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

0

質問文にあったParameters の内容を indent をつけて書いてみました。

Parameters: { "utf8"=>"✓", "authenticity_token"=>”xxxxxxxxx==", “test"=>{ "name"=>”Taro", “address_attributes"=>{ "0"=>{ “post"=>”1600000", "_destroy"=>"false"}, "1442884374698"=>{ “post"=>”1700000", "_destroy"=>”false”} } } }

params["authenticity_token"] とアクセスするとよさそうなことがわかります。

params[:test][:authenticity_token][0] とした場合は、params[:test][:authenticity_token] が nil になり、 nil に対する [0] のアクセスでエラーになると思われるのですが...

まずは params の内容を正確に把握することが必要と思います。

投稿2015/09/22 03:57

katoy

総合スコア22324

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

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

beginer

2015/09/22 05:30

Masakazuさん、katoyさん コメント、ありがとうございます。 質問に誤りがありましたので訂正させていただきます。 誤:params[:test][:authenticity_token][0] 正:params[:test][:address_attributes][0] でアクセスしてもnilになるという質問でした。失礼しました。 取り出したいのは、"1600000"や"1700000"という値です。 (そもそも目的は、確認画面を作成していて、値を取り出した後にクッキーに入れて、再度Viewに表示しようとしています。) アドバイス頂いた、params["authenticity_token"]の場合、Parameters全体が取得されてしまうと思うのですが、この考え自体が誤りなのでしょうか。 2度手間で申し訳ありませんがよろしくお願いします。
katoy

2015/09/22 06:24

> ... 取り出したいのは、"1600000"や"1700000" ... params["test"]["address_attributes"]["0"]["post"] params["test"]["address_attributes"]["1442884374698"]["post"] で、"1600000"や"1700000" が取り出せると思います。 > params["authenticity_token"]の場合、Parameters全体が取得されてしまうと思う ... 実際に試してみましたか? 質問文の情報からだと、params["authenticity_token"] は ”xxxxxxxxx==" となると思います。 質問文に記載されている情報は正確なのでしょうか?
guest

0

単純な疑問なのですが、
params[:authenticity_token]
ではだめでしょうか?

投稿2015/09/22 02:36

編集2015/09/22 02:37
MasakazuFukami

総合スコア1869

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

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

beginer

2015/09/22 05:31

Masakazuさん、katoyさん コメント、ありがとうございます。 質問に誤りがありましたので訂正させていただきます。 誤:params[:test][:authenticity_token][0] 正:params[:test][:address_attributes][0] でアクセスしてもnilになるという質問でした。失礼しました。 取り出したいのは、"1600000"や"1700000"という値です。 (そもそも目的は、確認画面を作成していて、値を取り出した後にクッキーに入れて、再度Viewに表示しようとしています。) アドバイス頂いた、params["authenticity_token"]の場合、Parameters全体が取得されてしまうと思うのですが、この考え自体が誤りなのでしょうか。 2度手間で申し訳ありませんがよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問