24 votes

comment ajouter des données à json en ruby/rails ?

Disons que j'ai ce code court :

item = Item.find(params[:id])
render :json => item.to_json

mais j'avais besoin d'insérer des informations supplémentaires dans l'objet json renvoyé, comment faire ?

Disons que j'ai besoin d'insérer cette information supplémentaire :

message : "it works"

Gracias.

26voto

Dogbert Points 44003
item = Item.find(params[:id])
item["message"] = "it works"
render :json => item.to_json

14voto

NM. Points 1204

El to_json La méthode prend un objet d'option comme paramètre . Ce que vous pouvez faire est de créer une méthode dans votre classe d'élément appelée message et de lui faire retourner le texte que vous voulez comme valeur.

class Item  < ActiveRecord::Base
 def message
  "it works"
 end
end

render :json => item.to_json(:methods => :message)

8voto

Steve Points 857

J'ai trouvé la réponse acceptée qui lance maintenant des avertissements de dépréciation dans Rails 3.2.13.

AVERTISSEMENT DE DEPRECATION : Vous essayez de créer un attribut message'. Writing arbitrary attributes on a model is deprecated. Please just use attr_writer` etc.

En supposant que vous ne souhaitiez pas intégrer l'attr_writer suggéré dans votre modèle, vous pouvez utiliser la fonction as_json (qui renvoie un Hash) pour modifier votre objet de réponse JSON.

item = Item.find(params[:id])
render :json => item.as_json.merge(:message => 'it works')

1voto

Stanley Shauro Points 437

Comment ajouter des données à json en ruby/rails 5

Si vous utilisez un échafaudage, par exemple :

rails generate scaffold MyItem

dans le dossier de vue, vous verrez les fichiers suivants :

app/view/my_item/_my_item.json.jbuilder
app/view/my_item/index.json.jbuilder

Ainsi, vous pouvez ajouter des données personnalisées à la sortie json pour un élément, il suffit d'ajouter ceci :

json.extract! my_item, :id, :some_filed, :created_at, :updated_at
json.url my_item_url(my_item, format: :json)    

json.my_data my_function(my_item)

Comme vous pouvez le voir, il est possible de modifier la sortie json d'un élément, comme la sortie json d'un index.

0voto

Leandro Castro Points 368

J'utilise toujours :

@item = Item.find(params[:id])
render json: { item: @item.map { |p| { id: p.id, name: p.name } }, message: "it works"  }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X