AMcoder - javascript, python, java, html, php, sql

Rails վավերացման հաղորդագրությունները JSON-ի տեսքով՝ accepts_nested_attributes_for models-ի համար

Ես ունեմ Mongoid մոդել, որն ունի մի քանի ներկառուցված ենթամոդելներ և հավաքածուներ: Ես սահմանել եմ իմ վերահսկիչի ատրիբուտները այդ մոդելների համար՝ օգտագործելով Rails accepts_nested_attributes_for ֆունկցիան:

Երբ վավերացումը ձախողվում է մայր մոդելի վրա, #errors-ը պարունակում է սխալի հաղորդագրություններ միայն մայր մոդելից, ոչ թե ենթամոդելներից որևէ մեկից:

Սա սովորաբար խնդիր չէ, քանի որ յուրաքանչյուր ներկառուցված մոդելի սխալի հաղորդագրությունները սովորաբար կարդում են, երբ ձևը վերաարտադրվում է սովորական Rails ձևի օգնականների միջոցով: Այնուամենայնիվ, ես ուզում եմ, որ բոլոր սխալները մեկ JSON օբյեկտում օգտագործվեն Backbone հավելվածի կողմից:

Այս պահին ես կրկնում եմ բոլոր ներկառուցված մոդելները և ձեռքով հավաքում սխալների բոլոր հավաքածուները, ինչը հոգնեցուցիչ է, բայց աշխատում է:

Ինչ-որ բան կարոտում եմ? Կա՞ ավելի հեշտ ճանապարհ:


Պատասխանները:


1

Ես հանդիպեցի նույն խնդրին՝ օգտագործելով Angular.js-ը ռելսերի հետ... Կարծում եմ, չկա ավելի լավ միջոց՝ դա շրջանցելու առանց ներկառուցված մոդելների բոլոր սխալները կրկնելու: Այս կապիկական պատիչը իմ ներկայիս լուծումն է, որն աշխատում է միայն մեկից մեկ հարաբերությունների համար.

module ActionController
  class Responder
    def json_resource_errors
      def get_error_recursively_from(res)
        Hash[res.errors.map do |key, value|
          if res.send(key).is_a? Mongoid::Relations
            result = get_error_recursively(res.send(key))
          else
            result = value
          end
          [key, result]
        end]
      end

      { :errors => get_error_recursively_from(resource) }
    end
  end
end
18.05.2013
  • Թվում է, թե ինչ-որ խոսակցություններ են եղել Ակտիվ մոդելային սերիալիզատորների և JSON API, բայց դեռ առաջընթաց չկա: Ես ընդունում եմ ձեր պատասխանը, թեև «որովհետև դուք պատասխանել եք կոդով :) 19.05.2013
  • Նոր նյութեր

    Օգտագործելով Fetch Vs Axios.Js-ը՝ HTTP հարցումներ կատարելու համար
    JavaScript-ը կարող է ցանցային հարցումներ ուղարկել սերվեր և բեռնել նոր տեղեկատվություն, երբ դա անհրաժեշտ լինի: Օրինակ, մենք կարող ենք օգտագործել ցանցային հարցումը պատվեր ներկայացնելու,..

    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար
    Տիրապետել հանգստության արվեստին. մշակողի ուղեցույց՝ ճնշման տակ ծաղկելու համար Ինչպե՞ս հանգստացնել ձեր միտքը և աշխատեցնել ձեր պրոցեսորը: Ինչպես մնալ հանգիստ և զարգանալ ճնշման տակ...

    Մեքենայի ուսուցում բանկային և ֆինանսների ոլորտում
    Բարդ, խելացի անվտանգության համակարգերը և հաճախորդների սպասարկման պարզեցված ծառայությունները բիզնեսի հաջողության բանալին են: Ֆինանսական հաստատությունները, մասնավորապես, պետք է առաջ մնան կորի..

    Ես AI-ին հարցրի կյանքի իմաստը, այն ինչ ասում էր, ցնցող էր:
    Այն պահից ի վեր, երբ ես իմացա Արհեստական ​​ինտելեկտի մասին, ես հիացած էի այն բանով, թե ինչպես է այն կարողանում հասկանալ մարդկային նորմալ տեքստը, և այն կարող է առաջացնել իր սեփական արձագանքը դրա..

    Ինչպես սովորել կոդավորումը Python-ում վագրի պես:
    Սովորելու համար ծրագրավորման նոր լեզու ընտրելը բարդ է: Անկախ նրանից, թե դուք սկսնակ եք, թե առաջադեմ, դա օգնում է իմանալ, թե ինչ թեմաներ պետք է սովորել: Ծրագրավորման լեզվի հիմունքները, դրա..

    C++-ի օրական բիթ(ե) | Ամենաերկար պալինդրոմային ենթաշարը
    C++ #198-ի ամենօրյա բիթ(ե), Ընդհանուր հարցազրույցի խնդիր. Ամենաերկար պալինդրոմային ենթատող: Այսօր մենք կանդրադառնանք հարցազրույցի ընդհանուր խնդրին. Ամենաերկար palindromic substring...

    Kydavra ICAReducer՝ ձեր տվյալների ծավալայինությունը նվազեցնելու համար
    Ի՞նչ է ICAReducer-ը: ICAReducer-ն աշխատում է հետևյալ կերպ. այն նվազեցնում է նրանց միջև բարձր փոխկապակցված հատկանիշները մինչև մեկ սյունակ: Բավականին նման է PCAreducer-ին, չնայած այն..