2016-09-12 13 views
1

次のように、私は私のコントローラでparams変数を取得しています:RoRの - ActionControllerから配列要素を削除::パラメータ私のRails 3.2のアプリケーションで

params.class   => ActionController::Parameters 
params[:a].class  => ActionController::Parameters 
params[:a][:b].class => Array 
params[:a][:b]  => ['1', '2', '3', '4'] 

私は、配列内の値を削除しようとすると、それは正しく反映されていません。

params[:a][:b].delete('1') 
=> "1" 

しかし、もう一度クエリを実行すると、変更はありません。

params[:a][:b] => ['1', '2', '3', '4'] 

変数に変数を再割り当てしても問題ありません。

arr = params[:a][:b] 
arr.delete('1') 
=> "1" 

arr 
=> ['2', '3', '4'] 

私はparamsオブジェクトを直接更新できません。あなたが唯一の `params`値を投稿することができます

params[:a][:b] = params[:a][:b].tap { |ary| ary.delete('1') } 
+0

: – dp7

+0

これを再現することはできません: 'params [:a] [:b] == ['1'、 '2']; params [:a] [:b] .delete( '1'); params [:a] [:b] == ['1'、 '2'] '。私が疑問に思うのは、あなたが何か面白いものを上書きしたということです。そして、 'params'は私が期待する以上のことをしています。関連性の高い完全なコントローラコードを投稿できますか?理想的には再現可能なもの。 –

+0

'arr = params [:a] [:b]を実行するとどうなりますか? arr.delete( '1'); params [:a] [:b] = arr; params [:a] [:b] '? – vitomd

答えて

2
params[:a][:b].tap { |ary| ary.delete('1') } 
#=> ['2', '3', '4'] 

はそれを新しい値を代入したいと思います params[:a][:b]の値を変更するには?
+0

しかし、これと 'params [:a] [:b] .delete( '1')'の違いは何ですか?あなたのコードはなぜ機能しますか?私は問題を再現できません。 –

+0

@TomLordはコンソールを起動し、その違いを確認してください;) –

+0

*戻り値は異なります。しかし、 'params'ハッシュの突然変異は重要ではありません。 –

関連する問題