Comment puis-je formater les données json avec ruby ​​on rails helpers?

J'ai passé les derniers jours à lire et à me familiariser avec le modèle de handlebars.js et c'est génial.

En ce moment je travaille avec un de mes partiels qui a un tas de html où j'ai utilisé des helpers tels que simple_format, time_ago_in_words et ainsi de suite. Évidemment, ces aides ne peuvent pas être utilisées avec un guidon. Donc, j'aimerais faire quelque chose comme ça:

def get_micropost

   respond_to do |format|   
     format.json { render json: formatted_micropost_json_data(Micropost.where("id < ?", params[:micropost_id]).first) } 
   end

end

Assistant Microposts:

module MicropostsHelper

    def formatted_micropost_json_data(micropost)

        content: simple_format h(micropost.content)
        created_at: time_ago_in_words(micropost.created_at)
        id: micropost.id
        image: micropost.image
        link: micropost.link
        poster_id: micropost.poster_id
        updated_at: micropost.updated_at 
        user_id: micropost.user_id 

    end

end

Donc, quand je récupère le JSON via un appel ajax, il sera déjà formaté correctement. Ensuite, je peux simplement afficher les variables de mon guidon comme d'habitude.

Est-ce que cela fonctionnerait même?

Sinon, quelle serait la meilleure façon de faire cela?

Sincères amitiés

0

1 Réponses

Voici ma réécriture suggérée de votre code:

class Micropost
  def formatted_json_data
    {
      content:    simple_format(h(self.content)),
      created_at: time_ago_in_words(self.created_at),
      id:         self.id,
      image:      self.image,
      link:       self.link,
      poster_id:  self.poster_id,
      updated_at: self.updated_at,
      user_id:    self.user_id
    }
  end
end

def get_micropost
  respond_to do |format|   
    format.json do
      posts = Micropost.where("id < ?", params[:micropost_id])
      data = posts.first.formatted_json_data
      render(json: data)
    end
  end
end

Vous vouliez un littéral de hachage à l'intérieur de votre méthode - ce que vous aviez à l'origine n'était pas du code ruby ​​syntaxiquement valide.

En outre, la rupture de la longue file d'appels de méthodes chaînées peut donner lieu à des messages d'erreur plus informatifs et fournir des opportunités plus claires pour les gérer.

0
ajouté
Je reçois le code d'état: 500 Erreur interne du serveur lors de l'utilisation ajax pour obtenir l'URL get_microposts. Ce n'est pas arrivé avant .. Pas trop sûr pourquoi ça se passe maintenant.
ajouté l'auteur LondonGuy, source
Voici l'erreur: NoMethodError (méthode non définie `formatted_json_data 'pour # ):
ajouté l'auteur LondonGuy, source
Cela m'a conduit à ma réponse. Merci
ajouté l'auteur LondonGuy, source
Eh bien, je ne suis pas sûr de ce que le reste de votre code ressemble, donc vous devrez adapter ma réponse de manière raisonnable pour travailler avec le reste de celui-ci. L'erreur 500 indique probablement qu'une erreur ruby ​​a été déclenchée - si vous pouviez inspecter les journaux pour trouver le nom et la trace de l'erreur, cela pourrait éclaircir un peu la question.
ajouté l'auteur arcresu, source
Avez-vous défini la méthode comme je l'ai fait? Je l'ai mis comme une méthode d'exemple du modèle parce que cela m'a semblé raisonnable. Je ne suis pas sûr de la portée de h et de time_ago_in_words , donc s'il est plus pratique de le garder en tant qu'assistant comme vous l'aviez fait, alors l'important était de corriger la syntaxe littérale de hachage en ajoutant des accolades et des virgules comme je l'ai fait.
ajouté l'auteur arcresu, source