Rails 4: before_filter vs before_action

340

Di rel> generator 4.0.0 menciptakan operasi CRUD dengan before_actiontidak before_filter. Sepertinya melakukan hal yang sama. Jadi apa bedanya keduanya?

freemanoid
sumber

Jawaban:

521

Seperti yang bisa kita lihat di ActionController::Base, before_actionhanya sintaks baru untuk before_filter.

Namun semua before_filterssintaks tidak lagi digunakan dalam Rails 5.0 dan akan dihapus dalam Rails 5.1

freemanoid
sumber
42
Di satu sisi penghinaan memiliki akal tetapi di sisi lain ada praktik yang baik di rel dan di ruby ​​memiliki beberapa alias untuk satu metode sehingga Anda dapat menggunakannya dalam konteks yang berbeda tanpa kehilangan makna.
freemanoid
4
Dalam 4.2 Mereka tidak mencela itu, tetapi menghapusnya dari dokumen karena tidak disarankan. edgeguides.rubyonrails.org/…
onetwopunch
17
Jika tidak disarankan, mengapa Anda tidak mencela itu? Bodoh.
Berikan Birchmeier
4
@ JohnWhitley - penghentian tidak merusak API. Itulah inti dari penghinaan.
Berikan Birchmeier
9
@JohnWhitley - Spamming karena suatu alasan. Setiap proyek yang disiplin harus mengatasi peringatan penghentian dengan tidak menggunakan fungsi yang sudah usang .
Berikan Birchmeier
67

Itu hanya perbedaan sintaksis, dalam aplikasi rel ada CRUD, dan tujuh tindakan pada dasarnya berdasarkan indeks nama , baru , buat , tampilkan , perbarui , edit , musnahkan .

Rails 4 membuatnya ramah bagi pengembang untuk mengubah sintaksis sebelum filter ke sebelum aksi .

before_action metode panggilan sebelum tindakan yang kami nyatakan, sukai

before_action :set_event, only: [:show, :update, :destroy, :edit]

set_event adalah metode yang akan memanggil selalu sebelum menampilkan, memperbarui, mengedit, dan menghancurkan.

Menunggu
sumber
31

Itu hanya perubahan nama. before_actionlebih spesifik, karena dijalankan sebelum tindakan.

Matthias
sumber
1

before_filter / before_action: berarti apa saja yang akan dieksekusi sebelum tindakan apa pun dijalankan.

Keduanya sama. mereka hanya alias untuk satu sama lain karena perilaku mereka sama.

Pankaj Dhote
sumber
-3

Untuk mengetahui apa perbedaan antara before_action dan before_filter, kita harus memahami perbedaan antara tindakan dan filter.

Aksi adalah metode pengontrol yang dapat Anda gunakan untuk rute. Misalnya, halaman pembuatan pengguna Anda mungkin dialihkan ke UsersController # new - new adalah aksi dalam rute ini.

Filter dijalankan sehubungan dengan tindakan pengontrol - sebelum, setelah atau di sekitarnya. Metode ini dapat menghentikan pemrosesan tindakan dengan mengarahkan ulang atau mengatur data umum ke setiap tindakan dalam pengontrol.

Rails 4 -> _action

Rails 3 -> _filter

yusefu
sumber