Cum se formatează date JSON cu ruby ​​pe ajutoarele șinelor?

Am petrecut ultimele zile în lectură și m-am familiarizat cu handlebars.js templating și e minunat.

În acest moment lucrez cu unul dintre partialii mei care are o grămadă de html unde am folosit ajutoare cum ar fi simple_format, time_ago_in_words și așa mai departe. Evident, acești ajutoare nu pot fi folosite cu ghidon. Aș vrea să fac așa ceva:

def get_micropost

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

end

Ajutor pentru microposturi:

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

Deci, când voi primi JSON înapoi printr-un apel ajax, acesta va fi deja formatat corect. Apoi pot să îmi arăt simplu variabilele ghidonului drept normal.

Ar funcționa chiar asta?

Dacă nu, care ar fi cel mai bun mod de a face acest lucru?

Salutări calde

0

1 răspunsuri

Iată rezumarea sugerată a codului dvs.:

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

V-ați dorit să aveți un literalism hash în interiorul metodei dvs. - ceea ce ați avut inițial nu era un cod rubinic valabil sintactic.

De asemenea, ruperea liniei lungi de apeluri prin metoda lanțului ar putea genera mesaje de eroare mai informative și să ofere oportunități mai clare de a le gestiona.

0
adăugat
Obținerea codului de stare: 500 eroare internă la server când folosesc ajax pentru a obține adresa get_microposts. Acest lucru nu sa întâmplat înainte .. Nu prea sigur de ce se întâmplă acum.
adăugat autor LondonGuy, sursa
Aceasta este eroarea: NoMethodError (metoda nedefinită `formatted_json_data 'pentru # ):
adăugat autor LondonGuy, sursa
Acest lucru ma dus la răspunsul meu. Mulțumiri
adăugat autor LondonGuy, sursa
Ei bine, nu sunt sigur ce arată restul codului dvs., deci va trebui să-mi adaptați răspunsul în mod rezonabil pentru a lucra cu restul. Eroarea 500 indică probabil o eroare rubinică a fost ridicată - dacă ați putea inspecta jurnalele pentru a găsi numele și backtrace de eroare, atunci ar putea arunca o lumină mai mult pe ea.
adăugat autor arcresu, sursa
Ați definit metoda pe care am făcut-o? Am pus-o ca o metodă instanță a modelului pentru că mi sa părut sensibil. Nu sunt sigur cum sunt codificate h și time_ago_in_words , deci dacă este mai practic să-l păstrați ca pe un ajutor ca și cum ați fi bine, dar partea importantă a fost reparați sintaxa literală hash adăugând bretele curbate și virgule ca mine.
adăugat autor arcresu, sursa
JavaScript, România - Moldova
JavaScript, România - Moldova
328 participanți

Comunitatea Română JavaScript: github.com/js-ro Pentru confort, opriți notificările. Parteneri: @node_ro, @php_ro, @python_ro, @seo_ro, @RomaniaGroup, @ai_ro, @Grupuri_IT Offtop: @holywars_ro Joburi: @js_jobs_ro Sponsored with ❤️ by ciupacabra.com