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 № 1Deberí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