It does not raise NoMethodError.
# frozen_string_literal: true
begin
require "bundler/inline"
rescue LoadError => e
$stderr.puts "Bundler version 1.10 or later is required. Please update your Bundler"
raise e
end
gemfile(true) do
source "https://rubygems.org"
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
gem "active_model_serializers", "0.10.10"
gem "pry-byebug"
end
require "active_model"
require "minitest/autorun"
class User < ActiveModelSerializers::Model
attributes :name
end
class UserSerializer < ActiveModel::Serializer
attributes :name
end
class BugTest < Minitest::Test
def test_attributes
user = User.new(name: :alice)
actual = ActiveModelSerializers::SerializableResource.new(user, serializer: UserSerializer, root: :data).serializable_hash
assert_equal actual, {:name=>:alice}
end
end
active_model_serializers] Rendered UserSerializer with ActiveModelSerializers::Adapter::Attributes (1.02ms)
E
Finished in 0.012480s, 80.1282 runs/s, 0.0000 assertions/s.
1) Error:
BugTest#test_attributes:
NoMethodError: undefined method `singularize' for :data:Symbol
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model/serializer/fieldset.rb:15:in `fields_for'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model/serializer.rb:369:in `serializable_hash'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/adapter/attributes.rb:14:in `serializable_hash'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/serializable_resource.rb:10:in `serializable_hash'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:71:in `block (3 levels) in notify'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:109:in `block in run_callbacks'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:24:in `block (3 levels) in instrument_rendering'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:81:in `block in notify_render'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `block in instrument'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications/instrumenter.rb:23:in `instrument'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/notifications.rb:168:in `instrument'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:80:in `notify_render'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:23:in `block (2 levels) in instrument_rendering'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:97:in `block in tag_logger'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:71:in `block in tagged'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:28:in `tagged'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/tagged_logging.rb:71:in `tagged'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:97:in `tag_logger'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:22:in `block in instrument_rendering'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `instance_exec'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:118:in `block in run_callbacks'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/activesupport-5.2.3/lib/active_support/callbacks.rb:136:in `run_callbacks'
/Users/souka/.rbenv/versions/2.6.1/lib/ruby/gems/2.6.0/gems/active_model_serializers-0.10.10/lib/active_model_serializers/logging.rb:70:in `block (2 levels) in notify'
a.rb:33:in `test_attributes'
1 runs, 0 assertions, 0 failures, 1 errors, 0 skips
https://github.com/rails-api/active_model_serializers/issues/2342
docs/general/adapters.md#json describes the ways to override the root key.
In short, this works only for the following adapters:
:attributes adapter (which is the default adapter) does not have any effect with the root key.
You can pass in the key as a string in the root option to make it work:
```
actual = ActiveModelSerializers::SerializableResource.new(user, serializer: UserSerializer, root: 'data').serializable_hash
Thank you for reply.
In version 0.10.9, I pass Symbol and root option is working. So, I was surprised.
Is it the expected behavior? If answer is yes, I change my application code.
thanks @taki for reporting the issue :+1: able to reproduce it on my side too. will take a look into this soon
Most helpful comment
thanks @taki for reporting the issue :+1: able to reproduce it on my side too. will take a look into this soon