Witaj na blogu prowadzonym przez Sebana. Spisuję tutaj swoje uwagi na różny temat. Przeważają tematy związane z Internetem, popieranymi przeze mnie rozwiązaniami dotyczącymi wykorzystania komputerów, oraz kilka innych.
UJS, atrytuby data-* w Rails 3
20 września 2010 | Klucze:
it,
programowanie,
rails,
Techblog
8 komentarzy. trackback
Ostatnio sporo radności i satysfakcji daje mi zabawa z nowymi Railsami. Pisząc nowymi mam na myśli nowinki jakie pojawiły się w Rails 3. Ponieważ mam podejście do "jeśli piszę coś w domu i nikt mnie nie ogranicza to użyję coś czego nie mam okazji używać nacodzień". W końcu trzeba się czegoś nowego czasem nauczyć ;). I tak ostatnio trochę bawiłem się jQuery w Rails 3.
Każdy kto śledził nowości w Rails 3 wie, że teraz na topie jest "unobtrusive JavaScript" i korzystanie z niestandardowych atrybutów data-*. I tak to co w wcześniejszych wersjach wypluwał helper:
wstawiało jakieś wstrętne i rozwlekłe kody JS, a teraz wygląda tak:
link_to 'Delete', object_path(object), :confirm => "Are you sure?", :method => :delete
<a href="/object/1024" data-method="delete" data-confirm="Are you sure?">Delete</a>Przez to kod wypluwany przez metody pomocnicze nie ma bezpośrednio do czynienia z kodem JavaScript i nie ma znaczenia czy jest używany Prototype, jQuery czy coś jeszcze innego. Obsługa tego typu helperów umieszczona jest standardowo w pliku public/javascripts/rails.js. Poniżej zademonstruję jak zaimplementować obsługę własnych atrybutow data-*.
Przykładowe zadanie: wyświetlać ilość wpisanych w textarea znaków.
W widoku będzie coś takiego:
= form_for(:message, :url => messages_path, :html => { :class => "form", :id => "new_message_form" }) do |f| = f.text_area :body, "data-counter" => "span#message-counter" # bla bla blaW rezultacie zostanie wypluty HTML:
<form action="/messages"> <textarea name="message_body" data-counter="span#message-counter" /> </form>Aby licznik automatycznie się odświeżał należy dopisać jego obsługę w JS, ja użyłem jQuery i zrobiłem to tak:
$(document).ready(function() { $(document).find('*[data-counter]').each(function(element) { var counter = $($(this).attr('data-counter')); $(this).keyup(function(event) { counter.html($(this).val().length) }) }) })Trzeba tylko pamiętać by plik JS ładować w szablonie za pomocą javascript_include_tag.
Ciekawe linki na podobny temat:
- Dynamically removing some website content in Rails 3 Way (Prototype, UJS) Robert Pankowecki opisał coś takiego przede mną, nie ukrywam, że wzorowałem się na nim i jego wpis trochę otworzył mi oczy. Dzięki Robert!
- jQuery with Rails 3 - opis jak zastąpić standardowy rails.js tym, który korzysta z jQuery
Rails 3 + Ruby 1.9.2 + Megiteam
04 września 2010 | Klucze:
programowanie,
rails,
ruby,
Techblog
2 komentarze. trackback
Jak powszechnie wiadomo Rails 3 zostało wydane. Niektórzy niecierpliwi (w tym ja) już wcześniej bawili się wersjami beta i release candidate. Kilka osób już chwaliło się udanymi przejściami z wersji 2.3 na 3.0. Dla mnie Rails 3 to przede wszsytkim okazja na przejście z Ruby 1.8 do 1.9. Dziś opiszę w jaki sposób uruchomiłem tandem Rails 3.0 - Ruby 1.9.2 na hostingu współdzielonym Megiteam.
Ruby 1.9.2
Moja ulubiona firma hostingowa - Megiteam już od dłuższego czasu dawała możliwość korzystania z Ruby 1.9.1-p0. Jak zrobić to krok bo kroku w pomocy Megiteam. Bułka z masłem. Napisałem maila do Pani Magdy i po godzinie wersja była podbita do 1.9.2. Jedyną rzeczą jaką musiałem zrobić, a której nie ma w ww. artykule to dopisanie katalogu z plikami wykonywalnymi gemów do PATH: /home/seban/www/.ruby/gems/1.9/bin/. Pierwszy sukces! Tak, pewnie można zrobić to za pomocą rvm, jednak ja nie próbowałem.
Bundler
Jeśli nie wiesz co to jest Bundler zachęcam do przeczytania artykułu w serwisie rubysfera.pl.
Instalacja bundlera: gem install bundler. Nie powinno być najmniejszych problemów. Drugi sukces!
Thin
Megiteam daje trzy możliwości uruchamiana aplikacji Rails:
- Mongrel, Ruby 1.8
- Thin, Ruby 1.8
- Thin,Ruby 1.9
Deploy
Deploy za pomoca Capistrano nie różni się specjalnie od standardowego. Musimy jedynie zmienić dwie rzeczy:
- deploy musi uwzględniać użycie bundlera
- restart aplikacji musi się odbyć za pomocą meigteamowego skryptu 'restart-app'
Restart aplikacji już kiedyś opisywałem. Cały Capfile dostępny jest w formie gista.

