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

Ինչպե՞ս ստեղծել հատկանիշ, որը կպահպանվի բոլոր ActiveRecords-ում (Rails):

Ես ուզում եմ ավելացնել մի հատկանիշ, որը կպահպանվի իմ տվյալների բազայում, իմ բոլոր մոդելների դասերին Ruby on Rails նախագծում: Ես ուզում եմ մի բան, ինչպիսին է create_ad և updated_at ատրիբուտները, բայց ես չգիտեմ, թե ինչպես է դա հնարավոր, կամ նույնիսկ եթե այդպես է:

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

11.07.2018

  • Լավ հարց է. Ահա ActiveRecord էջին հղում, որը նկարագրում է այն փոփոխականները, որոնց մասին խոսում եք. guides.rubyonrails .org/ նրանց համար, ովքեր ցանկանում են հասկանալ, թե ինչ վարքագիծ է նա վկայակոչում: 11.07.2018

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


1

Դուք պետք է գործարկեք միգրացիա (կամ մի քանիսը), որը կավելացնի սյունակը բոլոր անհրաժեշտ մոդելներին: Սա շրջանցելու ճանապարհ չկա:

Ինչ վերաբերում է միգրացիաներին, դուք սահմանափակված եք միայն ձեր երևակայությամբ: Ամենապարզ ձևը բոլոր միգրացիաները ձեռքով գրելն է, յուրաքանչյուր աղյուսակի միգրացիա:

Կարող եք նաև գրել մի սցենար, որը ձեզ համար կստեղծի միգրացիոն ֆայլեր: Կամ ամեն ինչ արեք նույն միգրացիայի մեջ. պարզապես զանգահարեք add_columnին մի օղակում:

11.07.2018
  • Ես հակված եմ այստեղ համաձայնվել Սերխիոյի հետ: Ես հասկանում եմ, թե ինչ եք ուզում անել, բայց դուք պարզապես պետք է ինքներդ ստեղծեք նոր սյունակները Միգրացիաների միջոցով: Հավանաբար կա ActiveRecord-ի բազային վարքագիծը երկարացնելու ինչ-որ միջոց, որպեսզի անեք այն, ինչ ցանկանում եք, բայց ի վերջո դա կարող է ավելի բարդ լինել, քան պարզապես ինքներդ նոր սյունակներ ավելացնելը: 11.07.2018
  • @TimHolt. Անկեղծ ասած, ես չեմ տեսնում, թե ինչպես AR-ի ներքին հարդարանքը կօգնի հասնել նոր հատկանիշների կայունությանը: Ինչ-որ բան պետք է ստեղծել սյունակներ իրական տվյալների բազայում: 11.07.2018
  • համաձայնեցին. Դա մի տեսակ տեսականորեն AR-ն ընդլայնելու ճիշտ ճանապարհն է, բայց դա մեծ աշխատանք կլինի: Դա ասված է, որ այն հնչում է որպես գոհարի հիանալի գաղափար: 13.07.2018

  • 2

    Գոյություն ունեցող նախագծի համար ոչ մի տարբերակ չկա յուրաքանչյուր մոդելի համար միգրացիաներ առաջացնելու համար: Հնարավոր է, որ դա ավտոմատացնելու համար գրեք առաջադրանք՝ պտտելով ֆայլերը app/models-ում և օգտագործելով էվրիստիկա՝ հիմնված ռելսերի անվանման կոնվենցիաների վրա՝ միգրացիաներ առաջացնելու համար:

    names = Dir.glob(Rails.root.join('app', 'models', '*.rb')).map do |p|
      Pathname.new(p).basename.to_s.chomp('.rb')
    end.reject {|p| p == "application_record"}
    models = names.map { |n| n.classify.constantize }
    models.each do |m|
      next unless m.ancestors.include?(ActiveRecord::Base)
      puts %x{ rails g migration add_foo_to_#{m.table_name} foo:string }
    end
    

    Սա (շատ) պարզեցված օրինակ է, որը հաշվի չի առնում «անվանատարածք» մոդելները և չի կարգավորում սխալները:

    Greenfield նախագծի կամ նոր մոդելների համար կարող եք ստեղծել ձեր սեփական գեներատորները, որոնք կավելացնեն լրացուցիչ սյունակ, երբ դուք գործարկում եք ռելսերի գեներատորի ստանդարտ հրամանները, ինչպիսիք են rails g model:

    11.07.2018
  • Պարտադիր չէ, որ բոլոր մոդելներն ունենան տվյալների բազայի համապատասխան աղյուսակ, կարող են լինել առանց սեղանի մոդելներ: 11.07.2018
  • @ZohaibA.Butt. ոչ AR մոդելները բաց թողնելը այստեղ մեկ պայմանական պայմանի ավելացման խնդիր է: Բայց լավ է իմանալ այս մասին, այո: 11.07.2018
  • @ZohaibA.Butt սա չափազանց պարզեցված օրինակ է հակիրճ լինելու համար: Իրական աշխարհի ցանկացած հավելվածի համար դուք պետք է ավելացնեք սխալների մշակում և փնտրեք նախնիներին՝ համոզվելու համար, որ դրանք ActiveRecord մոդելներ են: 11.07.2018
  • Դա անելու այլընտրանքային միջոց, որը կաշխատի առնվազն postgres-ի վրա, SELECT tablename FROM pg_tables WHERE schemaname='public';-ի օգտագործումն է՝ յուրաքանչյուր աղյուսակի անունները ստանալու համար, այնուհետև յուրաքանչյուրի համար միգրացիա ստեղծելը: 11.07.2018
  • @max. mysql-ը կարող է նույնքան լավ կատարել այս ոճի ներդաշնակությունը: select * from information_schema.tables where database = 'mydb' կամ նման բան: 11.07.2018
  • Նոր նյութեր

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

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

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

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

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

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

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