# Creare nuova view JSON

**URL:** <https://www.ruby-forum.com/t/creare-nuova-view-json/243703>\
**Category:** IT\
**Created:** [December 23, 2015, 11:19am UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703 "2015-12-23T11:19:13Z")\
**Posts on this page:** 9\
**Page:** 1

<div class="post-metadata">

**Author:** ![Rafa\_F](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/r/958977/32.png) [@Rafa\_F](https://www.ruby-forum.com/u/Rafa_F)\
**Post date:** [December 23, 2015, 11:19am UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/1 "2015-12-23T11:19:13Z")

</div>

Salve, mi sto dilettando a sperimentare con rails ma mi chiedevo quale  
fosse il modo giusto per creare delle views in JSON.  
In pratica dovrei creare una view show che mi dia tutti i campi di un  
prodotto e le categorie associate oltre al venditore associato. Meglio  
creare un nuovo controller e quindi delle nuove view o inserire una  
nuova funzione nel controller del prodotto e una nuova view?

Tutto ciò perché vorrei poi con una singola chiamata ajax poter vedere i  
dati ed eventualmente editarli.

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 23, 2015, 8:37pm UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/2 "2015-12-23T20:37:41Z")

</div>

Tante volte non in serve rispondere sia in html che in json alla stessa  
url per cui di solito si fanno controller separati, magari con quello  
json in un namespace API::NomeController. In questo modo si separano  
anche le view json da quelle html e l’applicazione resta più ordinata.  
Non credo però che sia altro che una preferenza. Io stesso in questo  
momento ho un progetto con un controller che risponde in html a certe  
azioni e in json ad altre. Aumentando le chiamate json però li separerò.

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 25, 2015, 10:59am UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/3 "2015-12-25T10:59:37Z")

</div>

Si, infatti tengo molto all’ordine…per non impazzire in fase di  
review. Ma mi chiedevo se cambiasse qualcosa in termini di prestazioni.  
Magari avere solo risposte in Json e non in html migliora le  
perfomance??

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 25, 2015, 8:54pm UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/4 "2015-12-25T20:54:12Z")

</div>

Le prestazioni del server quasi sicuramente migliorano perché la  
dimensione del file JSON normalmente è inferiore a quella della pagina  
html. Spetta poi al JavaScript sul client generare l’HTML. Nella mia  
esperienza questo riduce le performance dello sviluppatore, a meno di  
averne due (backend e frontend). Dipende da quello che è più importante  
in un dato progetto.

Se le performance sono molto importanti: da prove che ho fatto, creare  
le view JSON con jbuilder è più lento che generarle manualmente dentro  
il controller. Se si vuole il massimo della velocità pare che si debbano  
seguire vie un po’ estreme come questa

> **[Avoid Rails When Generating JSON responses with PostgreSQL - DockYard](https://dockyard.com/blog/2014/05/27/avoid-rails-when-generating-json-responses-with-postgresql)**
>
> Let's use PostgreSQL instead of Ruby to generate JSON responses

(ma occhio a  
[Blog - 2ndQuadrant | PostgreSQL](http://blog.2ndquadrant.com/postgresql-ctes-are-optimization-fences/))

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 26, 2015, 3:38pm UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/5 "2015-12-26T15:38:33Z")

</div>

Grazie Paolo, ottimo aiuto.  
Tralasciando l’articolo, che porta ad una alta ottimizzazione dei  
passaggi da fare, mi pare di capire che nel mio caso rails  
invia il risultato di ActiveRecord a jbuilder per creare le stringhe  
JSON…aggiungendo un passaggio in più, corretto?

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 28, 2015, 1:46pm UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/6 "2015-12-28T13:46:57Z")

</div>

Solo una cosa non mi è chiara…o forse più di una 😃

Io ho dei locali, delle categorie e dei prodotti.

Le categorie sono associate ad un locale tramite place\_id e i prodotti  
sono associati ad una categoria tramite category\_id.

In place voglio fare un render in JSON che mi dia tutte le info del  
locale, le categorie associate e i prodotti associate alle categorie.

Sono riuscito a farmi dare le categorie in questo modo:

[http://codepaste.net/wux3sf](http://codepaste.net/wux3sf)

Ma se volessi anche mostrare i prodotti?? Impossibile farlo da qui?

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 29, 2015, 8:06am UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/7 "2015-12-29T08:06:34Z")

</div>

La tua view è

json.extract! @place, :id, :name, :address  
json.categories @place.categories, :name

I prodotti sono associati alle categorie e non a @place, quindi nel  
controller farei qualcosa del tipo

@products = Product.find(@place.categories.pluck(:id))

e nella view aggiungerei

json.products @products, :name

Standard disclaimer: non ho provato il codice, sarà sbagliato in 2 o 3  
modi diversi, etc

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [January 12, 2016, 12:46pm UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/8 "2016-01-12T12:46:31Z")

</div>

ottimo, grazie mille.  
Adesso sto cercando di eliminare jbuilder di mezzo.  
Sto creando delle API implementando il versioning e sto cercando  
qualcosa di appropriato per generare dei token da usare nel client ( che  
poi è un’app per smartphone ).

---

<div class="post-metadata">

**Author:** ![saro\_v](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/a87d85/32.png) [@saro\_v](https://www.ruby-forum.com/u/saro_v)\
**Post date:** [December 27, 2015, 12:27am UTC](https://www.ruby-forum.com/t/creare-nuova-view-json/243703/9 "2015-12-27T00:27:39Z")

</div>

Corretto. Per json un po’ articolati jbuilder è la cosa migliore, ma se  
devi produrre solo un array ti conviene farlo direttamente nel  
controller. Poi se devi staccar millisecondi, in ordine di fatica: 1)  
usa pluck per fare una select dei soli campi che servono (si guadagna  
sempre tanto), 2) non usare jbuilder, 3) bypassa del tutto AR, 4) la 2 e  
la 3 insieme, 5) la bizzarria che ti linkavo.
