Ruby on Rails: Lokalizované formulárové polia pre čísla a dátum

Ak ste v Rails programovali aplikáciu pre slovenských užívateľov, tak ste sa mohli stretnúť s tým, že dáta vo formulároch sa nevypisujú v takom formáte, ako by ste si želali. Napríklad čísla s desatinnou „bodkou“ namiesto čiarky. Alebo dátumy vo formáte 2013-07-19 namiesto 19. 7. 2013.

Bohužiaľ s týmto si štandardná i18n rails lokalizácia neporadí, preto je vhodné napísať si vlastné helper metódy. Toto sú tie moje, fungujúce v Rails 4.

# helpers pre formularove polia
# mozete ich vlozit do app/helpers/application_helper.rb
class ActionView::Helpers::FormBuilder
  def localized_date_field(date, params_hash = {})
    params_hash[:value] = object.send(date).nil? ? nil : I18n.localize(object.send(date))
    text_field date, params_hash
  end

  def localized_number_field(number, params_hash = {})
    params_hash[:value] = object.send(number).nil? ? nil : object.send(number).to_s.sub('.', ',')
    text_field number, params_hash
  end
end

Potom Vám stačí v šablóne pre formulár zavolať len nasledujúci kód pre dátum:

<%= f.localized_date_field :date %>

prípadne číslo:

<%= f.localized_number_field :number %>

Ak máte nastavené aj locale na slovenčinu, tak sa už dátumy a čísla budú zobrazovať správne.

Avšak ostáva tu ešte jeden problém. A to, že Rails pri ukladaní čísla odignoruje všetko čo je za čiarkou. Čiže z 3,14 sa stane 3.

Toto treba ošetriť na úrovni modelu a treba vytvoriť vlastnú set metódu pre daný atribút. Príklad pre atribút number.

# hack, aby sa ',' konvertovala na '.'
def number=(value)
  if value.respond_to?('sub')
    value.sub!(',', '.')
  end
  write_attribute(:number, value)
end

Čo sa dátumu týka, tak tam Rails korektne spracuje aj dátum zadaný v slovenskom formáte.

Nie je na to nejaký gem?

Ale áno je, volá sa delocalize a toto všetko robí automaticky. Bohužiaľ s Rails 4 nefunguje, čiže mne bol nanič ;). Moje Ruby a Rails znalosti nie sú ešte na takej úrovni, aby som ho dokázal upraviť na Rails 4. A okrem toho sa mi ten kód v ňom zdal prasácky. Ale to možno bude len tými znalosťami ;).

Cyklovozíkový pokus – predčasný koniec

Minule som písal, že idem robiť pokus s požičovňou cyklo vozíkov. Dnes som ho nadobro ukončil a ľudom, ktorý prejavili predbežný záujem som napísal, že požičiavanie sa nekoná.

Hlavné dôvody, prečo som to zabalil sú dva.

  1. Nenašiel som nijaký spôsob, ako to robiť úplne legálne, ale bez registračnej pokladnice. S faktúrami problém nemám, ale kupovať si registračnú pokladnicu, len kvôli tomuto pokusu sa mi fakt nechcelo. Chcel som to robiť maximálne jednoducho, ale neprišiel som na to ako.
  2. Nebola by to žiadna zlatá baňa. Ak by bola, tak by bod číslo jedna nebol vôbec žiadny problém. Ale neoplatí sa mi to kvôli pár stovkám mesačne (optimistický predpoklad) v letnom období. Namiesto toho môžem venovať čas a energiu niečomu inému.

Samo o sebe sa mi to ako pokus páčilo a váhal som či to mám stopnúť. Ale už som sa pár krát oklamal, len kvôli tomu, že som niečo dopredu nestopol… Páčilo sa mi spraviť si jednoduchý web a nahodiť inzeráty. Ešte viac sa mi páčilo, keď sa ozvalo zopár ľudí (málo, dokopy asi 9) a napísali, že sa im páči nápad a držia palce a že majú záujem. Ale pomer náklady (aj časové)/zisk sa mi už nepáčil.

Čiže to balím a verím, že vďaka tomu sa mi konečne podarí spraviť niečo lepšie.

Začíname s Ruby on Rails

Chcete sa naučiť programovať v Ruby on Rails a neviete kde začať? Môžete to skúsiť ako ja.

  1. Ako prvé sa uistite, že viete dobre po anglicky. Teda aspoň rozumiete písanému textu. Bez angličtiny sa nezaobídete. Po slovensky alebo po česky totiž nenájdete nič použiteľné. Bohužiaľ.
  2. Začnite s Rails Tutorial. Presne tak, začnite tu a nie s oficiálnou dokumentáciou. Dôvod? Je tam vysvetlené všetko. Nielen Ruby on Rails, ale celý ROR stack. HTML, CSS, Javascript, ruby… A okrem toho aj test driven development, git, alebo aj nasadzovanie aplikácie do produkcie cez heroku. Ale nie, že to budete len čítať. Skúšajte si aj príklady a uistite sa, že tomu aj rozumiete. Odporúčam to každému začiatočníkovi!
  3. Máte prečítaný a hlavne pochopený rails tutorial? Výborne. Začnite programovať! A popri tom si   čítať Rails Guides. Getting started with rails bude zrazu oveľa ľahšie na pochopenie. A v ostatných kapitolách si môžete hľadať presne čo treba.
  4. Ok. Programujete, ďalej sa učíte a stále tomu niečo chýba? U mňa to bolo podobné a pomohla mi kniha Agile Web Development with Rails 4. Dávam ju až sem, lebo podľa mňa nie je vhodná pre začiatočníkov.
  5. ??? Pravdu povediac neviem, sem som ešte nedošiel ;) Ale ak máte nejaké tipy, tak sem s nimi.
  6. Zasekli ste sa niekde? Nevadí. Použite google. Je totiž dosť pravdepodobné, že niekto iný už podobný problem riešil a hlavne aj vyriešil. Väčšinou na Stack Overflow.

Každopádne musím povedať, že programovanie v Rails ma baví. A to sa neživím programovaním. Proste ma to baví a je v tom radosť robiť web aplikácie. Na jednej rozsiahlejšej práve pracujem. Je určená pre uľahčenie života konkurzným správcom. Zadávajú sa do nej pohľadávky ku konkurzom a reštrukturalizáciám a výstupom bude vééľáľa rôznych papierov, čo treba posielať na súd. Dúfam, že bude mať úspech. A ak nie, nevadí, aspoň som sa pri nej dosť naučil.

Cyklovozíkový pokus

Osobne celkom rád športujem, napríklad aj behávam. A keďže mám malú dcérku, tak by to chcelo nejak spojiť príjemné a užitočné (beh) s príjemným a užitočným (čas strávený s dcérkou). Preto si chcem kúpiť cyklovozík, ktorý sa dá využiť aj na beh.

Keď som sa o tom bavil s kolegom, tak on vravel, že by si ho namiesto kupovania rád požičal. Hmm. Tak prečo nie? Hneď som dostal nápad s požičovňou, ktorý treba otestovať. Napríklad na začiatok so stránkou mapujúcou dopyt.

Tak som konečne zbúchal môj prvý web v twitter bootstrap (ktorý som chcel niekde využiť, odkedy som ho objavil) a v Ruby on Rails (ukladanie emailov), hodil som to na Heroku a tadaaa.

Predstavujem vám požičovňu cyklovozíkov v Bratislave ;).

Ja osobne to beriem ako taký pokus. Nebudem hneď predsa kupovať 10 vozíkov, keď ani neviem či sa viem dostať k zákazníkom. Tak som hodil inzerát na bazos.sk, link do tohto článku a uvidíme, či sa vôbec niekto ozve.