Merge pull request #28270 from mmangino/dont_ignore_seralization_options
Don't accidentally lose includes in serialization
This commit is contained in:
commit
0605f45ab3
@ -1,5 +1,9 @@
|
||||
## Rails 6.0.0.alpha (Unreleased) ##
|
||||
|
||||
* Do not lose all multiple `:includes` with options in serialization.
|
||||
|
||||
*Mike Mangino*
|
||||
|
||||
* Rails 6 requires Ruby 2.4.1 or newer.
|
||||
|
||||
*Jeremy Daer*
|
||||
|
@ -179,7 +179,7 @@ def serializable_add_includes(options = {}) #:nodoc:
|
||||
return unless includes = options[:include]
|
||||
|
||||
unless includes.is_a?(Hash)
|
||||
includes = Hash[Array(includes).map { |n| n.is_a?(Hash) ? n.to_a.first : [n, {}] }]
|
||||
includes = Hash[Array(includes).flat_map { |n| n.is_a?(Hash) ? n.to_a : [[n, {}]] }]
|
||||
end
|
||||
|
||||
includes.each do |association, opts|
|
||||
|
@ -174,4 +174,11 @@ def test_multiple_includes_with_options
|
||||
{ "name" => "Sue", "email" => "sue@example.com", "gender" => "female" }] }
|
||||
assert_equal expected, @user.serializable_hash(include: [{ address: { only: "street" } }, :friends])
|
||||
end
|
||||
|
||||
def test_all_includes_with_options
|
||||
expected = { "email" => "david@example.com", "gender" => "male", "name" => "David",
|
||||
"address" => { "street" => "123 Lane" },
|
||||
"friends" => [{ "name" => "Joe" }, { "name" => "Sue" }] }
|
||||
assert_equal expected, @user.serializable_hash(include: [address: { only: "street" }, friends: { only: "name" }])
|
||||
end
|
||||
end
|
||||
|
Loading…
Reference in New Issue
Block a user