Nowy

Zezwalanie na komentarze dotyczące Ruby on Rails

Zezwalanie na komentarze dotyczące Ruby on Rails

01 z 07

Zezwalanie na komentarze

lechatnoir / E + / Getty Images

W poprzedniej iteracji, Dodawanie uwierzytelniania RESTful, do bloga dodano uwierzytelnianie, aby tylko autoryzowani użytkownicy mogli tworzyć posty na blogu. Ta iteracja doda ostatnią (i główną) funkcję samouczka blogu: komentarze. Po zakończeniu tego samouczka użytkownicy będą mogli dodawać anonimowe komentarze do postów na blogu bez logowania.

02 z 07

Rusztowanie komentarzy

Tworzenie tabel bazy danych komentarzy i kontrolera odbywa się w podobny sposób, jak tabele bazy danych postów i kontrolera zostały utworzone - za pomocą generatora rusztowań. Generator rusztowania utworzy kontrolery RESTful, zmapuje trasy i utworzy migracje baz danych. Ale zanim się na to zdecydujesz, musisz pomyśleć o tym, co to jest komentarz i kim będą jego członkowie danych. Komentarz ma:

  • Nazwa (wymagane pole): Nazwa komentatora jako ciąg.
  • E-mail (pole opcjonalne): Wiadomość e-mail komentatora jako ciąg.
  • Body (wymagane pole): Treść komentarza jako tekst.
  • słupek: To wiąże komentarz z określonym postem na blogu. Jest to wymagane dla ma wiele i należy do wspomnienia.

Po ustaleniu, kim są członkowie danych komentarza, możesz uruchomić generator rusztowań. Zauważ, że pole postu jest typu „referencje”. Jest to specjalny typ, który wygeneruje pole ID, aby połączyć tabelę komentarzy z tabelą postów za pomocą klucza obcego.

$ skrypt / wygeneruj komentarz rusztowania nazwa: ciąg e-mail: treść ciągu: post tekst: referencje
istnieje aplikacja / modele /
istnieje aplikacja / kontrolery /
istnieje aplikacja / helpers /
… Snip…

Po wygenerowaniu kontrolerów i migracji możesz rozpocząć migrację, uruchamiając zadanie rake db: migrate.

$ rake db: migracja
== 20080724173258 CreateComments: migracja ========
- create_table (: komentarze)
-> 0,0255s
== 20080724173258 CreateComments: zmigrowany (0,0305 s)
03 z 07

Konfiguracja modelu

Po utworzeniu tabel bazy danych możesz rozpocząć konfigurowanie modelu. W modelu, takie jak sprawdzanie poprawności danych - w celu zapewnienia obecności wymaganych pól - i można zdefiniować relacje. Zostaną wykorzystane dwie relacje.

Wpis na blogu ma wiele komentarzy. Relacja has_many nie wymaga żadnych specjalnych pól w tabeli postów, ale tabela komentarzy ma post_id, aby połączyć ją z tabelą postów. Z Railsów możesz powiedzieć coś takiego @wstawiać komentarze aby uzyskać listę obiektów komentarzy należących do obiektu @post. Komentarze są również zależny na ich nadrzędnym obiekcie Post. Jeśli obiekt Post zostanie zniszczony, wszystkie potomne obiekty komentarzy również powinny zostać zniszczone.

Komentarz należy do obiektu postu. Komentarz może być powiązany tylko z jednym postem na blogu. Relacja nalezy do wymaga tylko jednego pola post_id znajdującego się w tabeli komentarzy. Aby uzyskać dostęp do obiektu nadrzędnego komentarza komentarza, możesz powiedzieć coś takiego @ comment.post w szynach.

Poniżej przedstawiono modele Post i Comment. Do modelu komentarzy dodano kilka sprawdzeń poprawności, aby użytkownicy mogli wypełnić wymagane pola. Zwróć także uwagę na relacje has_many i należ_do.

# Plik: app / models / post.rb
class Post <ActiveRecord :: Base
has_many: komentarze,: zależne =>: zniszczyć
koniec
# Plik: app / models / comment.rb
Komentarz klasy <ActiveRecord :: Base
należy do: posta
validates_presence_of: name
validates_length_of: name,: within => 2… 20
validates_presence_of: body
koniec
04 z 07

Przygotowanie kontrolera komentarzy

Kontroler komentarzy nie będzie używany w tradycyjny sposób jak kontroler RESTful. Po pierwsze, będzie dostępny wyłącznie z widoków postów. Formularze komentarzy i wyświetlanie są całkowicie w akcji pokazowej kontrolera Post. Na początek usuń całość aplikacja / widoki / komentarze katalog, aby usunąć wszystkie widoki komentarzy. Nie będą potrzebne.

Następnie musisz usunąć niektóre działania z kontrolera Komentarze. Wszystko czego potrzeba to Stwórz i zniszczyć działania. Wszystkie pozostałe działania można usunąć. Ponieważ kontroler komentarzy jest teraz tylko skrótem bez widoków, musisz zmienić kilka miejsc w kontrolerze, w których próbuje on przekierować do kontrolera komentarzy. Gdziekolwiek występuje przekierowanie_do, zmień je na redirect_to (@ comment.post). Poniżej znajduje się pełny kontroler komentarzy.

# Plik: app / controllers / comments_controller.rb
klasa CommentsController <ApplicationController
def create
@comment = Comment.new (params: comment)
if @ comment.save
; flash: notice = 'Komentarz został pomyślnie utworzony.'
redirect_to (@ comment.post)
jeszcze
flash: notice = "Błąd podczas tworzenia komentarza: #{@comment.errors}"
redirect_to (@ comment.post)
koniec
koniec
def zniszczyć
@comment = Comment.find (params: id)
@ comment.destroy
redirect_to (@ comment.post)
koniec
koniec
05 z 07

Formularz komentarzy

Jednym z ostatnich elementów, które należy wprowadzić, jest formularz komentarzy, który w rzeczywistości jest dość prostym zadaniem. Zasadniczo są dwie rzeczy do zrobienia: utwórz nowy obiekt Komentarz w akcji show kontrolera wpisów i wyświetl formularz, który podda się akcji tworzenia kontrolera komentarzy. Aby to zrobić, zmodyfikuj akcję show w kontrolerze postów, aby wyglądała następująco. Dodana linia jest pogrubiona.

# Plik: app / controllers / posts_controller.rb
# GET / posts / 1
# GET /posts/1.xml
def show
@post = Post.find (params: id)
@comment = Comment.new (: post => @post)

Wyświetlanie formularza komentarza jest takie samo jak każdego innego formularza. Umieść to u dołu widoku dla akcji show w kontrolerze postów.

06 z 07

Wyświetlanie komentarzy

Ostatnim krokiem jest wyświetlenie komentarzy. Podczas wyświetlania danych wejściowych użytkownika należy zachować ostrożność, ponieważ użytkownik może próbować wstawić tagi HTML, które mogą zakłócić działanie strony. Aby temu zapobiec, h metoda jest używana. Ta metoda pozwoli uniknąć znaczników HTML, które użytkownik próbuje wprowadzić. W dalszej iteracji można zastosować język znaczników, taki jak RedCloth lub metoda filtrowania, aby umożliwić użytkownikom publikowanie określonych tagów HTML.

Komentarze będą wyświetlane częściowo, tak jak posty. Utwórz plik o nazwie app / views / posts / _comment.html.erb i umieść w nim następujący tekst. Wyświetli komentarz, a jeśli użytkownik jest zalogowany i może usunąć komentarz, wyświetli również link Zniszcz, aby zniszczyć komentarz.


mówi:
: potwierdzić => „Jesteś pewien?”,
: method =>: delete if logged_in? %>

Na koniec, aby wyświetlić wszystkie komentarze do wpisu jednocześnie, wywołaj komentarze częściowo za pomocą : collection => @ post.comments. Spowoduje to częściowe wywołanie komentarzy dla każdego komentarza należącego do posta. Dodaj następujący wiersz do widoku pokazu w kontrolerze postów.

„komentarz”:: collection => @ post.comments%>

W tym celu wdrażany jest w pełni funkcjonalny system komentarzy.

07 z 07

Następna iteracja

W następnej iteracji samouczka simple_format zostanie zastąpiony bardziej złożonym silnikiem formatowania o nazwie RedCloth. RedCloth pozwala użytkownikom tworzyć treści za pomocą łatwych znaczników, takich jak * pogrubienie * dla pogrubienia i _italic_ dla kursywy. Będzie to dostępne zarówno dla postów na blogu, jak i dla komentujących.

Obejrzyj wideo: Create your online Shopify business 2019 (Może 2020).