diff --git a/app/logical/application_responder.rb b/app/logical/application_responder.rb index 1ac4a1d75..eb9baac34 100644 --- a/app/logical/application_responder.rb +++ b/app/logical/application_responder.rb @@ -17,7 +17,7 @@ class ApplicationResponder < ActionController::Responder options[:root] ||= resource.table_name.dasherize if resource.respond_to?(:table_name) end - options[:only] ||= params["only"].scan(/\w+/).map(&:to_sym) if params["only"] + options[:only] ||= params["only"].scan(/\w+/) if params["only"] super end diff --git a/app/models/application_record.rb b/app/models/application_record.rb index 767c92a18..cb7877af3 100644 --- a/app/models/application_record.rb +++ b/app/models/application_record.rb @@ -294,6 +294,8 @@ class ApplicationRecord < ActiveRecord::Base options[:include] ||= [] options[:methods] ||= [] + options[:only] = options[:only].map(&:to_sym) + attributes, methods = api_attributes.partition { |attr| has_attribute?(attr) } methods += options[:methods] includes = options[:include] diff --git a/test/functional/tags_controller_test.rb b/test/functional/tags_controller_test.rb index 6d458fb07..b555957ba 100644 --- a/test/functional/tags_controller_test.rb +++ b/test/functional/tags_controller_test.rb @@ -49,6 +49,13 @@ class TagsControllerTest < ActionDispatch::IntegrationTest get autocomplete_tags_path, params: { search: { name_matches: "t" }, format: :json } assert_response :success end + + should "respect the only param" do + get autocomplete_tags_path, params: { search: { name_matches: "t", only: "name" }, format: :json } + + assert_response :success + assert_equal "touhou", response.parsed_body.first["name"] + end end context "show action" do