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

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

ただいまの
回答率

90.49%

  • Ruby on Rails 4

    2455questions

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

配列内の値の取得方法

受付中

回答 3

投稿

  • 評価
  • クリップ 0
  • VIEW 1,613

beginer

score 15

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 配列 取得」などで調べたのですが、なかなか理解できる内容にたどり着けませんでした。
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 3

0

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

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/09/22 14:31

    Masakazuさん、katoyさん
    コメント、ありがとうございます。
    質問に誤りがありましたので訂正させていただきます。
    誤:params[:test][:authenticity_token][0]
    正:params[:test][:address_attributes][0]
    でアクセスしてもnilになるという質問でした。失礼しました。
    取り出したいのは、"1600000"や"1700000"という値です。
    (そもそも目的は、確認画面を作成していて、値を取り出した後にクッキーに入れて、再度Viewに表示しようとしています。)

    アドバイス頂いた、params["authenticity_token"]の場合、Parameters全体が取得されてしまうと思うのですが、この考え自体が誤りなのでしょうか。
    2度手間で申し訳ありませんがよろしくお願いします。

    キャンセル

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 14:30

    Masakazuさん、katoyさん
    コメント、ありがとうございます。
    質問に誤りがありましたので訂正させていただきます。
    誤:params[:test][:authenticity_token][0]
    正:params[:test][:address_attributes][0]
    でアクセスしてもnilになるという質問でした。失礼しました。
    取り出したいのは、"1600000"や"1700000"という値です。
    (そもそも目的は、確認画面を作成していて、値を取り出した後にクッキーに入れて、再度Viewに表示しようとしています。)

    アドバイス頂いた、params["authenticity_token"]の場合、Parameters全体が取得されてしまうと思うのですが、この考え自体が誤りなのでしょうか。
    2度手間で申し訳ありませんがよろしくお願いします。

    キャンセル

  • 2015/09/22 15: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==" となると思います。

    質問文に記載されている情報は正確なのでしょうか?

    キャンセル

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が提示してくる「おすすめ」のキーワードを使って検索してみる
  • 検索結果があまり思わしくない場合でも、検索結果の上位の「プレビュー」を見て、検索に使えそうなキーワードがあれば参考にする
  • キーワードを追加したり削ったりしながら検索結果を見る
  • キーワードの順序を変えてみる
といった工夫をすると、結構な確率で知りたい情報を見つけ出すことができます。
以上、ご参考まで。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • Ruby on Rails 4

    2455questions

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