diff options
author | Vince DeVendra <vdevendra@patientslikeme.com> | 2018-03-24 12:23:37 -0400 |
---|---|---|
committer | Vince DeVendra <vdevendra@patientslikeme.com> | 2018-03-24 12:23:37 -0400 |
commit | d65d74b9158acf1ca79508a4ed49ffc712bdb983 (patch) | |
tree | 761f5a5f452173ae3b780225a93d6ceea6f84ee5 /actionpack/test | |
parent | ff6d498704cff88b823871d20c5dfcaa3345ead7 (diff) | |
download | rails-d65d74b9158acf1ca79508a4ed49ffc712bdb983.tar.gz rails-d65d74b9158acf1ca79508a4ed49ffc712bdb983.tar.bz2 rails-d65d74b9158acf1ca79508a4ed49ffc712bdb983.zip |
Make mutating params#dig mutate underlying params
When #dig was called on a params object and return either a Hash or an
Array, and that value was subsquently mutated, it would not modify the
containing params object. That means that the behavior of
`params.dig(:a, :b)[:c] = 1` did not match either `params[:a][:b][:c] =
1` nor `hash.dig(:a, :b)[:c] = 1`. Similarly to
`ActionController::Parameters#[]`, use `#convert_hashes_to_parameters`
to pre-convert values and insert them in the receiving params object
prior to returning them.
Diffstat (limited to 'actionpack/test')
-rw-r--r-- | actionpack/test/controller/parameters/accessors_test.rb | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/actionpack/test/controller/parameters/accessors_test.rb b/actionpack/test/controller/parameters/accessors_test.rb index 07a897a103..674b2c6266 100644 --- a/actionpack/test/controller/parameters/accessors_test.rb +++ b/actionpack/test/controller/parameters/accessors_test.rb @@ -284,4 +284,12 @@ class ParametersAccessorsTest < ActiveSupport::TestCase value.is_a?(ActionController::Parameters) end end + + test "mutating #dig return value mutates underlying parameters" do + @params.dig(:person, :name)[:first] = "Bill" + assert_equal "Bill", @params.dig(:person, :name, :first) + + @params.dig(:person, :addresses)[0] = { city: "Boston", state: "Massachusetts" } + assert_equal "Boston", @params.dig(:person, :addresses, 0, :city) + end end |