使用ActiveModel :: Serializers解析JSON API时,有没有办法不必将JSON中的每一个键都指定为属性?
说我的观点只需要:first_name, :last_name, :country
- 除非我还在JSON中指定其他键:street_address, :postal_code, :phone, :email
,否则我会得到未定义的方法' street_address ='对于#。
我发现http://bigastronaut.com/blog/2014/don-t-serialize-just-a-few-give-me-all-attributes但他的公关尚未被接受:https://github.com/rails-api/active_model_serializers/pull/535 - 我还能做些什么吗?
class GetFromJson
include ActiveModel::Serializers::JSON
attr_accessor :first_name, :last_name, :country # :street_address, :postal_code, :phone, :email
def attributes=(hash)
hash.each do |key, value|
send("#{key}=", value)
end
end
def self.fetch
# Code to fetch JSON from API
end
end
答案 0 :(得分:1)
我认为最好直接在序列化程序中定义你想要的东西,但我可以看出你的观点,在某些情况下这可能很烦人......你可以做的一件事就是为每个列名定义所有的attr_accessors在模型中,如果序列化程序应该序列化特定的ActiveRecord模型,那么。
例如,假设您有一个名为Person
的AR模型,只需编写Person.column_names
即可找到该对象的所有数据库属性,这不会为您提供虚拟属性。想要,但至少'默认为您提供所有数据库属性'
所以它会是这样的:
class PersonSerializer < ActiveModel::Serializer
Person.column_names.each {|pcn| attributes pcn}
#...define other virtual attributes here, etc.
end