Tworzenie Prostej Platformy Blogerskiej - Model

Przez:, Z dnia:

Ten tutorial zakłada, że już ukończyłeś:

  1. Install Ruby on Rails
  2. Create a Ruby on Rails application
  3. Create Static Pages - without this deploy will not work
  4. Install Git
  5. Create a remote Git Repository - optional but recommended
  6. Deploy application to Heroku
  7. Manage users with Devise
  8. How to add Twitter Bootstrap to a Ruby on Rails application - Advised

Sprawmy by nasza strona robiła coś użytecznego. Co powiecie na platformę blogerską, na której użytkownicy dzielą się artykułami. Nasza nowa aplikacja internetowa bedzie miała takie cechy:

  • wszyscy użytkownicy mogą tworzyć, edytować o usuwać własne posty
  • wszyscy użytkownicy mogą czytać posty innych użytkowników

Krok 1: Stwórz model "Post" w Terminalu

Zaczniemy od stworzenia nowego modelu dla naszych postów. Otwórz terminal, przejdź do aplikacji. Upewnij się, że wpisałeś Post zaczynając wielką literą w pojedynczej formie.

bash

$ cd documents/projects/demo
$ rails generate model Post title:string body:text
invoke  active_record
create    db/migrate/20140507054439_create_posts.rb
create    app/models/post.rb
invoke    test_unit
create      test/models/post_test.rb
create      test/fixtures/posts.yml

Krok 2: Otwórz plik migracyjny

Tak samo jak podczas generowania modelu użytkowników z Devise, stworzylismy kilka plików: migracja, model, pliki testowe. Najpierw otwórzmy migrację.

db/migrate/20140507054439_create_posts.rb

class CreatePosts < ActiveRecord::Migration
  def change
    create_table :posts do |t|
      t.string :title
      t.text :body

      t.timestamps
    end
  end
end

Ten pli migracyjny zostanie użyty do stworzenia nowej tablicy w bazie danych i przetrzymywania w niej postów. Uważaj to za arkusz kalkulacyjny, który będzie miał kolumny i wiersze. Każdy wiersz będzie zawierał informacje o jednym poście; każda kolumna będzie zawierać inny rodzaj tych informacji. Nasze posty będą miały tytuł, którego typ danych to "string" (niedługi ciąg znaków, jak zdanie w każdym języku), treść, której typem danych będzie "text" (dłuższa część tekstu). Rails także stworzy dwie kolumny created_at i updated_at dzięki linijce t.timestamps.

  id  |  title  |  body  |  created_at  |  updated_at
-------------------------------------------------------
      |         |        |              |

Zanim dokonamy migracji bazy danych, możemy dokonać zmian w pliku migracji. Możemy dodać, zmienić nazwę pól lub je usunąć. Później już nie możemy wprowadzić zmian. W celu wprowadzenia zmian do bazy danych po migracji musimy stworzyć kolejną migrację, w innym przypadku zwyczajnie prosimy się o kłopoty.

Krok 3: Otwórz plik modelu Posta

Drugi plik to faktyczny model posta:

app/models/post.rb

class Post < ActiveRecord::Base
end

W tym momencie mamy tylko linijkę otwierającą i zamykającą bez żadnego własnego kodu. Wrócimy wkrótce do tego pliku.

Krok 4: Odpal migracje

Jak narazie, potrzebujemy uruchomić migracje bazy danych. Uruchom w terminalu:

bash

$ rake db:migrate

== 20140507054439 CreatePosts: migrating ======================================
-- create_table(:posts)
   -> 0.0054s
== 20140507054439 CreatePosts: migrated (0.0055s) =============================

Teraz nasza aplikacja posiada umiejętność tworzenia postów i tworzenia ich w bazie danych. Aby zobaczyć jak to działa, będziemy działać z aplikacją przez konsolę Rails, ponieważ nie mamy jeszcze żadnego interfejsu użytkownika. Otwórz nowe okno terminalu, przejdź do aplikacji i odpal komendę:

bash

$ rails console

Loading development environment (Rails 4.1.0)
2.1.1 :001 >

">" wskazuje na to, że uruchomiliśmy konsolę Rails. Jeżeli teraz wpiszesz komendy zewnętrznego wiersza poleceń - nie powiodą się. By zakończyć konsolę, albo wpisz "exit ", albo naciśnij "control + d" na klawiaturze.

Krok 5: Stwórz Post

Wpiszmy trochę kodu w wierszu poleceń konsoli:

bash

2.1.1 :001 > post = Post.new(title: "The first post ever", body: "Lorem ipsum dolor sit amet")

 => #<Post id: nil, title: "The first post ever", body: "Lorem ipsum dolor sit amet", created_at: nil, updated_at: nil>

Właśnie stworzyliśmy zmienną "post", i przypisaliśmy jej nowy Post. Post.new() - tworzy nowy obiekt w pamięci. Możemy przekazać parametry wewnątrz nawiasów, będą one użyte do zmontowania nowego rekordu. Zauważ, że "title"  i "body" odpowiadają polom, które stworzyliśmy podczas budowania modelu.

Krok 6: Zapisz Post

Widzisz również, że nowo stworzony model nie posiada ID. Kiedy pytamy o post.id, otrzymujemy wartość "nil". W bazie danych, każdy obiekt zawsze będzie miał ID - jest unikalny i  tworzy się on automatycznie. Teraz, rekord nie ma żadnego ID, bo nie jest jeszcze zapisany. Metoda "new" tworzy rekord tylko w pamięci i nie próbuje go zapsiać, dlatego też nie ma on przypisanego ID.

2.1.1 :002 > post.id

=> nil

Zapiszmy post:

2.1.1 :003 > post.save

(0.3ms)  begin transaction
SQL (0.5ms)  INSERT INTO "posts" ("body", "created_at", "title", "updated_at") VALUES (?, ?, ?, ?)  [["body", "Lorem ipsum dolor sit amet"], ["created_at", "2014-05-07 06:44:22.227792"], ["title", "The first post ever"], ["updated_at", "2014-05-07 06:44:22.227792"]]
(0.7ms)  commit transaction
=> true

Krok 7: Sprawdź ID

Sprawdźmy teraz czy zostało mu przypisane ID:

2.1.1 :004 > post.id
 => 1

Krok 8: Stwórz kolejny Post

Stwórzmy jeszcze jeden post:

2.1.1 :005 > new_post = Post.new(title: "Second post", body: "Lorem Ipsum Dolor Sit Amet")
2.1.1 :005 > new_post.save
2.1.1 :005 > Post.count
 => 2

Mamy więc już parę rekordów w naszej bazie danych. Zbudyjmy interfejs użytkownika, któy będzie je wyświetlał.

Musisz się zalogować by móc oznaczyć tutorial jako ukończony żeby śledzić swój postęp



Komentarze

  • Z dnia: Frank napisał:

    Done! Syntax matters here. Thanks for the help.
  • Z dnia: Frank napisał:

    Solid, thanks! Syntax matters here, I had some trial and error.

Dodaj komentarz

Możesz się zalogować by skomentować