Tworzenie Prostej Platformy Blogerskiej - Model
Przez: Lukasz Muzyka, Z dnia:
Ten tutorial zakłada, że już ukończyłeś:
- Install Ruby on Rails
- Create a Ruby on Rails application
- Create Static Pages - without this deploy will not work
- Install Git
- Create a remote Git Repository - optional but recommended
- Deploy application to Heroku
- Manage users with Devise
- 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ł.
Komentarze
Dodaj komentarz
Możesz się zalogować by skomentować
Z dnia: Frank napisał:
Z dnia: Frank napisał: