Mengizinkan Komentar di Ruby on Rails

Pada iterasi sebelumnya, Menambahkan RESTful Authentication, otentikasi ditambahkan ke blog Anda sehingga hanya pengguna yang berwenang yang dapat membuat posting blog. Iterasi ini akan menambahkan fitur terakhir (dan utama) dari tutorial blog: komentar. Setelah Anda selesai dengan tutorial ini, pengguna akan dapat memposting komentar anonim di posting blog tanpa masuk.

Membuat komentar tabel database dan pengontrol dilakukan banyak dengan cara yang sama dengan posting database tabel dan pengontrol dibuat - dengan menggunakan generator perancah. Generator scaffold akan membuat pengendali tenang, memetakan rute dan membuat migrasi basis data. Tetapi sebelum Anda melanjutkan, Anda harus berpikir tentang apa itu komentar dan apa yang akan menjadi anggota data. Sebuah komentar memiliki:

Setelah Anda memutuskan apa yang menjadi anggota data komentar, Anda dapat menjalankan generator scaffold. Perhatikan bahwa kolom posting adalah tipe "referensi." Ini adalah tipe khusus yang akan menghasilkan bidang ID untuk menautkan tabel komentar dengan tabel posting melalui kunci asing.

instagram viewer

Setelah pengendali dan migrasi dibuat, Anda dapat melanjutkan dan menjalankan migrasi dengan menjalankan tugas db: migrate rake.

Setelah tabel database tersedia, Anda dapat mulai mengatur model. Dalam model, hal-hal seperti validasi data - untuk memastikan bidang yang diperlukan ada - dan hubungan dapat didefinisikan. Dua relasi akan digunakan.

Posting blog memiliki banyak komentar. Hubungan has_many tidak memerlukan bidang khusus dalam tabel posting, tetapi tabel komentar memiliki post_id untuk menautkannya ke tabel posting. Dari Rel, Anda bisa mengatakan hal-hal seperti @ post.comments untuk mendapatkan daftar objek Komentar milik objek @post. Komentar juga tergantung pada objek Post induknya. Jika objek Post dihancurkan, semua objek komentar anak harus dihancurkan juga.

Komentar milik objek posting. Komentar hanya dapat dikaitkan dengan satu posting blog. Hubungan hers_to hanya membutuhkan bidang post_id tunggal berada di tabel komentar. Untuk mengakses objek posting orang tua komentar, Anda dapat mengatakan sesuatu seperti @ comment.post dalam Rails.

Berikut ini adalah model Posting dan Komentar. Beberapa validasi telah ditambahkan ke model komentar untuk memastikan bahwa pengguna mengisi kolom yang diperlukan. Perhatikan juga hubungan has_many dan hers_to.

Pengontrol komentar tidak akan digunakan dengan cara tradisional pengontrol RESTful digunakan. Pertama, itu akan diakses hanya dari tampilan Post. Formulir komentar dan tampilan sepenuhnya dalam aksi pertunjukan pengontrol Post. Jadi, untuk memulainya, hapus keseluruhannya aplikasi / tampilan / komentar direktori untuk menghapus semua tampilan komentar. Mereka tidak akan dibutuhkan.

Selanjutnya, Anda perlu menghapus beberapa tindakan dari controller Komentar. Yang dibutuhkan hanyalah membuat dan menghancurkan tindakan. Semua tindakan lain dapat dihapus. Karena pengontrol Komentar sekarang hanya sebuah rintisan tanpa tampilan, Anda harus mengubah beberapa tempat di pengontrol di mana ia mencoba untuk mengarahkan ulang ke pengontrol Komentar. Di mana pun ada panggilan redirect_to, ubahlah ke redirect_to (@ comment.post). Di bawah ini adalah pengendali komentar yang lengkap.

Salah satu bagian terakhir untuk ditempatkan adalah formulir komentar, yang sebenarnya merupakan tugas yang agak sederhana. Pada dasarnya ada dua hal yang harus dilakukan: membuat objek Komentar baru dalam aksi tampilkan pengontrol posting dan menampilkan formulir yang tunduk pada tindakan buat dari pengontrol Komentar. Untuk melakukannya, ubah tindakan pertunjukan di pengontrol posting agar terlihat seperti berikut ini. Baris yang ditambahkan dicetak tebal.

Langkah terakhir adalah benar-benar menampilkan komentar. Harus diperhatikan saat menampilkan data input pengguna karena pengguna mungkin mencoba untuk memasukkan tag HTML yang dapat mengganggu halaman. Untuk mencegah ini, h Metode yang digunakan. Metode ini akan lolos dari semua tag HTML yang coba dimasukkan oleh pengguna. Dalam iterasi lebih lanjut, bahasa markup seperti RedCloth atau metode penyaringan dapat diterapkan untuk memungkinkan pengguna memposting tag HTML tertentu.

Komentar akan ditampilkan dengan parsial, sama seperti posting. Buat file bernama app / views / posts / _comment.html.erb dan tempatkan teks berikut di dalamnya. Ini akan menampilkan komentar dan, jika pengguna login dan dapat menghapus komentar, juga menampilkan tautan Hancurkan untuk menghancurkan komentar.

Terakhir, untuk menampilkan semua komentar suatu posting sekaligus, panggil komentar sebagian : collection => @ post.comments. Ini akan menyebut sebagian komentar untuk setiap komentar yang menjadi milik pos. Tambahkan baris berikut ke tampilan pertunjukan di pengontrol posting.

Dalam iterasi tutorial berikutnya, simple_format akan diganti dengan mesin pemformatan yang lebih kompleks yang disebut RedCloth. RedCloth memungkinkan pengguna untuk membuat konten dengan markup mudah seperti * tebal * untuk tebal dan _italic_ untuk miring. Ini akan tersedia untuk poster dan komentator blog.