Ruby on rails - ćwiczenie

Instalacja

  1. Pobierz i rozpakuj w katalogu tymczasowym dystrybucje Instant Rails
    (Polecam 7zip'a)
  2. Ustaw zmienną użytkownika PATH=c:\Temp\InstantRails\ruby\bin

Tworzenie aplikacji: demo

  1. Uruchom konsole
  2. Z katalogu "C:\Temp\InstantRails\rails_apps>" wykonaj "ruby ..\ruby\bin\rails\demo"

Uruchomienie serwera

  1. Uruchom "C:\Temp\InstantRails\instantrails.exe"
  2. Z menu Instant rails (Przycisk z literką I) wybierz Rails Apllications > Manage Rails Applications
  3. Zaznacz aplikacje demo i kliknij "Start with Mongrel" i "Close"
  4. Pod adresem http://127.0.0.1:3000/ znajduje się nasza aplikacja

Tworzenie Hello world

  1. Od teraz działamy na katalogu "C:\Temp\InstantRails\rails_apps\demo>"
  2. Uruchamiamy "ruby script/generate controller Blog"
  3. Tworzymy plik app\views\blog\index.rhtml i wpisujemy Hello World!
  4. Pod adresem http://127.0.0.1:3000/blog oglądamy wynik
  5. Sprawdźmy co się stanie jak do app\controllers\blog_controller wpiszemy
    def index
    	render :text => "Hello prosto z kontrolera"
    end
    

Budujemy baze danych

  1. Wybieramy z menu InstantRailsów Configure > Database
  2. Tworzymy bazę o nazwie demo_development
  3. Tworzymy tabele posts
  4. Tworzymy pole id:INT, które jest kluczem głównym, zaznaczmy auto_increment
  5. Tworzymy pole title:VARCHAR, o długości 255

Tworzymy model

  1. Uruchamiamy "ruby script/generate model Post"
  2. Dodajemy scaffolda: wpisujemy w ciało kontrolera "scaffold :post"
  3. Obejrzyjmy naszą stronę

Pobawmy się

  1. Dodajmy do bazy danych pola body:text, created_at:datetime
  2. Dodajmy walidacje obecności pola title w modelu: w pliku app/models/post.rb: dodajmy do klasy Post "validates_presence_of :title"
  3. Odświeżmy stronę, spróbujmy dodać post bez tytułu

Przyjrzyjmy się dokładniej

  1. Wygenerujmy scaffolda: "ruby script/generate scaffold Post Blog"
  2. W kontrolerze, w akcji list podmieniamy
    @post_pages, @posts = paginate :posts, :per_page => 10
    na:
    @posts = Post.find(:all)
  3. W widoku list.rhtml wklej
     
    <div style="width:600px; margin:auto">  
    
    <h1>My cool blog</h1>
    
    
    <% for post in @posts %>
    <div>  
        <%= link_to post.title, :action => 'show', :id => post %>
        <p>
        <%= post.body %>
        <p>
        <%= post.created_at.to_s %>
    
        <%= link_to 'Edit', :action => 'edit', :id => post %>
        <%= link_to 'Destroy', { :action => 'destroy', :id => post }, 
    		:confirm => 'Are you sure?', :method => :post %>
    <hr>
    </div>
    
    <% end %>
    </div>
    <%= link_to 'New post', :action => 'new' %>
    		  

Poprawmy strukturę

  1. Wydzielmy część odpowiedzialną za wyświetlanie posta w list.rhtml do pliku _post.rhtml
  2. Możemy teraz wyświetlić wszystkie posty:
    <%= render  :partial => "post", :collection => @posts.reverse %>
  3. Jak również w pliku show.rhtml możemy użyć tego samego partiala:
     <%= render  :partial => "post", :object => @post %>