/ / ¿Cómo renderizo solo dos campos de mi modelo como JSON? - Ruby-on-Rails, Json, Field, Ruby-on-Rails-5

¿Cómo renderizo solo dos campos de mi modelo como JSON? - Ruby-on-Rails, Json, Field, Ruby-on-Rails-5

Tengo una aplicación Rails 5 y tengo un modelo de persona con muchos atributos, incluyendo

id
name

Quiero representar estos dos atributos de una lista de personas que encuentro. Probé esto

        format.js {
render :json => @people.to_json(include: [:id, :name])
}

en el que "@ personas" es una matriz de objetos Person, pero lo anterior resulta en una

undefined method `serializable_hash" for 16:Integer

error. ¿Cuál es la forma correcta de representar solo dos campos de mi modelo de Person?

Respuestas

1 para la respuesta № 1

Deberías usar only: en lugar de include:

format.js {
render :json => @people.to_json(only: [:id, :name])
}

Mientras only le dará solo los atributos deseados de ese modelo, include Está destinado a incluir otras asociaciones de los modelos! (asociaciones como belong_to o has_many etc)

De todos modos, hay otra forma de obtener el mismo resultado usando select en la consulta modelo.

@poeple = Person.select(:id, :name).where(....)

y luego simplemente devuelva el to_json -> no necesita excluir ningún atributo ya que solo obtiene los atributos que desea en primer lugar.

** El segundo método solo es bueno si no necesita otros atributos en otros casos. Por ejemplo, si desea devolver la lista completa de atributos del modelo si no es json