Web - Amazon

We provide Linux to the World


We support WINRAR [What is this] - [Download .exe file(s) for Windows]

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
SITEMAP
Audiobooks by Valerio Di Stefano: Single Download - Complete Download [TAR] [WIM] [ZIP] [RAR] - Alphabetical Download  [TAR] [WIM] [ZIP] [RAR] - Download Instructions

Make a donation: IBAN: IT36M0708677020000000008016 - BIC/SWIFT:  ICRAITRRU60 - VALERIO DI STEFANO or
Privacy Policy Cookie Policy Terms and Conditions
Ruby on Rails - Wikipedia, wolna encyklopedia

Ruby on Rails

Z Wikipedii

Ruby on Rails
Logo programu
Rodzaj interpreter języka programowania
Aktualna wersja stabilna 2.0.2 - 17 Grudnia 2007
Licencja MIT Licence [1]
Platforma systemowa wieloplatformowy
rubyonrails.org
Screenshot

Ruby on Rails (często nazywany RoR lub po prostu Rails) - framework open source do szybkiego tworzenia aplikacji webowych stworzony przez duńskiego programistę Davida Heinemeiera Hanssona. RoR został napisany w języku Ruby z użyciem architektury MVC (ang. Model-View-Controller).

Spis treści

[edytuj] Główne założenia

  • szybkość, łatwość i przyjemność pisania kodu,
  • reguła DRY (ang. Don't Repeat Yourself), polegająca na unikaniu powtarzania tej samej pracy w różnych miejscach,
  • reguła Convention Over Configuration, polegająca na sprowadzeniu do minimum niezbędnej konfiguracji przez zastępowanie jej gotowymi domyślnymi, zalecanymi wzorcami.
  • możliwość użycia wtyczek, które w sposób błyskawiczny rozszerzają aplikacje o rozmaite funkcjonalności, jak logowanie, wrzucanie i skalowanie obrazków, czy tagowanie

[edytuj] Budowa

Na framework Rails składają się cztery główne elementy:

  • ActiveRecord - mechanizm ORM (Object-Relational mapping) dla Ruby, odpowiada za tworzenie modeli w architekturze MVC
  • ActionPack - biblioteka zawierająca klasy ActionController i ActionView, które odpowiadają za tworzenie odpowiednio kontrolerów i widoków
  • ActiveSupport - zbiór użytecznych dodatków do standardowej biblioteki Ruby, zawiera m.in. rozszerzenia klas String czy Time
  • ActionMailer - biblioteka służąca do wysyłania wiadomości email (najczęściej przez aplikację Rails)

Każda z tych części może zostać zainstalowana oddzielnie, np. za pomocą menadżera pakietów RubyGems. W skład dystrybucji Rails wchodzi też konsolowy program rails, który generuje drzewo katalogów nowego projektu.

[edytuj] Serwer

Działanie aplikacji napisanej z użyciem Rails oparte jest na odpowiednim serwerze. Obecnie poza standardowym serwerem, opartym na bibliotece WEBrick, dostępny jest serwer Mongrel. Raz uruchomiony serwer przypisuje nadchodzące żądania (requests) odpowiednim kontrolerom i na podstawie ich działania zwraca do klienta odpowiedź (response). Serwer Rails może działać samodzielnie lub być "ukryty" za innym serwerem HTTP jak Apache czy Lighttpd.

[edytuj] Sposób działania

Rails oparte jest o architekturę MVC, tzn. klient po wyświetleniu widoku (w tym przypadku wygenerowanej strony HTML), wysyła do aplikacji żądanie (klikając w odpowiedni link na stronie lub wypełniając formularz). Żądanie jest przyjmowane przez kontroler, który generuje odpowiedź w formie widoku wysyłanego do klienta(najczęściej kontroler w celu wygenerowania odpowiedzi pobiera dane z modelu, który w Rails implementowany jest jako relacyjna baza danych). Poniżej szczegółowo omówiono odpowiedzialne w Rails za model MVC mechanizmy.

[edytuj] Model - ActiveRecord

Modele w Rails reprezentowane są przez klasy dziedziczące po klasie bazowej ActiveRecord::Base. ActiveRecord jest mechanizmem ORM, tzn. przedstawia tabelaryczne dane z bazy danych w formie klas i obiektów. Tabeli w bazie danych odpowiada klasa dziedzicząca po ActiveRecord, kolumnom tabeli - właściwości(atrybuty) tej klasy, natomiast wartościom pól w bazie danych wartości atrybutów obiektów danej klasy. Oto przykład jaki kod można napisać dysponując w bazie danych przedstawioną tabelą:

users:

id (INTEGER) name (VARCHAR) created_at (DATETIME)
1 Adam 2007-01-14 22:07:13
2 Ewa 2007-01-05 13:56:48
# Klasa User dziedziczy po klasie ActiveRecord
User.count # => 2 adam = User.find(1) adam.name # => "Adam" ewa = User.find_by_name "Ewa" ewa.created_at.to_s # => "Fri Jan 05 13:56:48 +0100 2007"
jacek = User.new jacek.name = "Jacek" if jacek.save # zapis do bazy danych się udał User.count == 3 # => true else # wystąpiły błędy, np. pole oznaczone jako NOT NULL nie ma w obiekcie przypisanej żadnej wartości end

Warto zauważyć, że ActiveRecord automatycznie dopasowuje klasę User do tabeli users oraz jest w stanie automatycznie wypełniać niektóre pola (created_at). Standardowo każda tabela przeznaczona do pracy z ActiveRecord powinna mieć kolumnę "id" typu INTEGER, która jest jest głównym kluczem(PRIMARY KEY).

W klasach definiujących modele możemy określać zachodzące pomiędzy modelami relacja (jeden do jednego, jeden do wielu itp.), wymagania dotyczące rekordów (np. długość hasła) czy funkcje zwrotne (ang. callbacks) wywoływane m.in. przy zapisie danych do bazy. Można też dodawać inną funkcjonalność, jak np. metoda sprawdzająca na podstawie imienia czy użytkownik jest mężczyzną czy kobietą:

class User < ActiveRecord::Base
  # ...
  def is_male?
    name.last != "a" # jeżeli tak zwróci true
  end
  # ...
end

Co prawda Rails zostało zaprojektowane z myślą o pracy z relacyjnymi bazami danych, ale tworząc plik z definicją klasy w katalogu app/models możemy utworzyć klasę modelu, która nie dziedziczy po ActiveRecord::Base. Taka klasa może na przykład pobierać dane z plików XML. (lokalizacja pliku nie jest wymogiem, pomaga tylko w odszukaniu pliku klasy.)

[edytuj] Widoki - ActionView, RHTML

Klasa ActionView odpowiedzialna za widoki definiuje wiele pomocniczych metod, pozwalających generować kod HTML, np.:

link_to "Usuń użytkownika", { :action => "destroy", :id => @user.id }, :confirm => "Jesteś pewien?"
form_tag({:controller=>'user', :action=>'search'}, :method=>'get')

Widoki pisze się w plikach *.rhtml, które zawierają przemieszany kod HTML i Ruby. Tak przygotowany szablon interpretowany jest przez program ERB (Ruby Embedded), który działa podobnie do parsera PHP. Dzięki temu kod HTML może być np. generowany w pętli. Jeden widok odpowiada zazwyczaj jednej akcji kontrolera. Widoki na ogół osadzane są w jednolitym dla strony szablonie (ang. layout), do którego wstawia się wynik działania poszczególnych akcji.

[edytuj] Kontrolery - ActionController

Logika aplikacji zawarta jest w kontrolerach - klasach dziedziczących po ActionController. Każdy kontroler definiuje określony zbiór akcji(w Rails są to publiczne metody klas kontrolerów), który definiuje jego funkcjonalność. Jeden kontroler zazwyczaj skupia się na wykonaniu zadań z konkretnej dziedziny działania aplikacji. Oto jak mógłby wyglądać przykładowy kontroler do zarządzania kontami uzytkowników:

class UserController < ApplicationController
  def index
    redirect_to :action => :greet # przykład przekierowanie do innej akcji
  end 
def greet @user = User.find(session[:user_id]) # dostęp do danych zapisanych w sesji # ta prosta akcja nie wymaga więcej od kontrolera, # zmienna @user zostanie udostępniona widokowi, # który wygeneruje powitanie dla uzytkownika (np. witając po imieniu) end
def destroy @user = User.find(params[:id]) # parametr nadesłany metodą GET lub POST (bez znaczenia w tym przypadku) @user.destroy flash[:message] = "Użytkownik usunięty" # pamięć podręczna dostępna później w widoku dowolnej akcji @redirect_to :home_url # adres zdefiniowany w pliku routes.rb, zmiana adresu stony domowej nie wpłynie na działanie kontrolera end
protected # poniższe metody nie są publiczne, więc nie są akcjami
def check_user # dowolne działania, z których korzysta więcej niż jedna akcja # powinny zostać wydzielone do osobnej metody zgodnie z regułą DRY end end

Metoda index w tym przypadku przekierowuje żądanie do innej akcji, metoda greet pobiera dane z modelu i przekazuje je dalej (bez większej obróbki) do widoku. Metoda destroy dokonuje zmian w danych pobranych z modelu po czym oddaje sterowanie metodzie greet.

Po otrzymaniu od klienta żądania i przyporządkowaniu go do konkretnego kontrolera, serwer rails tworzy instancję klasy danego kontrolera i wywołuje metodę odpowiadającą danej akcji (domyślnie metodę index)

[edytuj] Dodatki do bibliotek Ruby - ActiveSupport

Moduł ActiveSupport zawiera wiele użytecznych rozszerzeń, których można używać pisząc aplikacje Rails:

# generuje format odpowiedni dla bazy danych
Time.now.to_s(:db) # => 2007-01-14 23:11:28
session[:remind_me] = 1.week.from_now
tags = ["zdjecia", "wakacje", "prywatne"] opis = "Oznaczono jako: " + tags.to_sentence(:connector => 'i', :skip_last_comma => true) # => "Oznaczono jako zdjecia, wakacje i prywatne"

W nadchodzącej wersji 1.2 biblioteka ActiveSupport ma również ułatwić korzystanie z Unicode.

[edytuj] Bazy danych

Rails może współpracować z różnymi odmianami relacyjnych baz danych, jedynym warunkiem jest istnienie odpowiedzialnej za jej obsługę biblioteki dla Ruby oraz obsługa danej bazy przez ActiveRecord - "adaptery" wszystkich popularnych typów baz danych są zawarte w dystrybucji ActiveRecord. W chwili obecnej obsługiwane bazy danych to:

Kod Rails powinien współpracować tak samo ze wszystkimi typami baz danych, pod warunkiem, że programista nie użył jawnie specyficznych dla danej bazy konstrukcji SQL. Rails posiada wbudowany mechanizm "migracji" (ang. migrations), który pozwala tworzyć, zmieniać i kontrolować schemat tabel w bazie danych, niezależnie od jej typu, używając jedynie kodu Ruby.

Jak wspomniano w części "Modele - ActiveRecord", Rails może pobierać dane również z plików (w tym XML, YML, CSV) czy dowolnego innego źródła obsługiwanego przez Ruby.

[edytuj] Bezpieczeństwo

Rails oferuje różne mechanizmy pozwalające dbać o bezpieczeństwo strony:

  • Metoda escape_html i jej alias h:
<%=h @user.name %>
  • Automatyczne zabezpieczanie zapytań SQL:
namesday_list = User.find :all, :conditions => ["name = ?", params[:name]]
# "Adam" => SELECT * FROM users WHERE name = 'Adam'
# "' OR 1 --'" => SELECT * FROM users WHERE name = ' ' ' OR 1 --' ' ' # pusta tablica zamiast wszystkich użytkowników
  • metoda before_filter pozwalająca sprawdzić autentyczność użytkownika przed wykonaniem akcji
class UserController < ApplicationController
  before_filter :login_required
  skip_before_filter :login_required, :only => ["login", "logout"]
end

[edytuj] Zobacz też

[edytuj] Linki zewnętrzne

Our "Network":

Project Gutenberg
https://gutenberg.classicistranieri.com

Encyclopaedia Britannica 1911
https://encyclopaediabritannica.classicistranieri.com

Librivox Audiobooks
https://librivox.classicistranieri.com

Linux Distributions
https://old.classicistranieri.com

Magnatune (MP3 Music)
https://magnatune.classicistranieri.com

Static Wikipedia (June 2008)
https://wikipedia.classicistranieri.com

Static Wikipedia (March 2008)
https://wikipedia2007.classicistranieri.com/mar2008/

Static Wikipedia (2007)
https://wikipedia2007.classicistranieri.com

Static Wikipedia (2006)
https://wikipedia2006.classicistranieri.com

Liber Liber
https://liberliber.classicistranieri.com

ZIM Files for Kiwix
https://zim.classicistranieri.com


Other Websites:

Bach - Goldberg Variations
https://www.goldbergvariations.org

Lazarillo de Tormes
https://www.lazarillodetormes.org

Madame Bovary
https://www.madamebovary.org

Il Fu Mattia Pascal
https://www.mattiapascal.it

The Voice in the Desert
https://www.thevoiceinthedesert.org

Confessione d'un amore fascista
https://www.amorefascista.it

Malinverno
https://www.malinverno.org

Debito formativo
https://www.debitoformativo.it

Adina Spire
https://www.adinaspire.com