Rails 4: before_filter vs. before_action


340

ในราง> 4.0.0 ปั่นไฟสร้างการดำเนินงาน CRUD ด้วยไม่ได้before_action before_filterดูเหมือนว่าจะทำในสิ่งเดียวกัน ดังนั้นความแตกต่างระหว่างสองสิ่งนี้คืออะไร?

คำตอบ:


521

ในฐานะที่เราสามารถมองเห็นในActionController::Base, before_actionเป็นเพียงไวยากรณ์ใหม่before_filterสำหรับ

อย่างไรก็ตามbefore_filtersไวยากรณ์ทั้งหมดจะถูกคัดค้านในRails 5.0และจะถูกลบในRails 5.1


42
ในแง่หนึ่งการลดค่าลงมีความหมาย แต่ในทางกลับกันมีวิธีปฏิบัติที่ดีในทางรถไฟและในทับทิมที่มีนามแฝงหลายวิธีวิธีหนึ่งเพื่อให้คุณสามารถใช้มันในบริบทที่แตกต่างกันโดยไม่สูญเสียความหมาย
freemanoid

4
ใน 4.2 พวกเขาจะไม่ลดค่าลง แต่จะลบออกจากเอกสารเพราะท้อแท้ edgeguides.rubyonrails.org/…
onetwopunch

17
ถ้ามันหมดกำลังใจแล้วทำไมคุณไม่หักล้างมันล่ะ โง่.
Grant Birchmeier

4
@JohnWhitley - การคัดค้านไม่ทำให้ API เสียหาย นั่นคือจุดทั้งหมดของการคัดค้าน
Grant Birchmeier

9
@JohnWhitley - การส่งสแปมนั้นมีเหตุผล โครงการใด ๆ ที่ดีมีระเบียบวินัยควรจะอยู่คำเตือนเลิกใช้โดยไม่ได้ใช้ฟังก์ชั่นเลิก
Birchmeier

67

มันเป็นเพียงความแตกต่างไวยากรณ์ในราง app มี CRUD เจ็ดและการกระทำโดยทั่วไปโดยชื่อดัชนี , ใหม่ , สร้าง , การแสดง , การปรับปรุง , แก้ไข , ทำลาย

ราง 4 มันทำให้นักพัฒนาที่เป็นมิตรกับไวยากรณ์การเปลี่ยนแปลงก่อนที่จะกรองไปก่อนที่จะดำเนินการ

before_actionวิธีการโทรก่อนการกระทำที่เราประกาศเช่น

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

set_eventเป็นวิธีการที่จะเรียกเสมอก่อนที่จะแสดงปรับปรุงแก้ไขและทำลาย


31

มันเป็นเพียงการเปลี่ยนชื่อ before_actionมีความเฉพาะเจาะจงมากขึ้นเพราะได้รับการดำเนินการก่อนการกระทำ


1

before_filter / before_action: หมายถึงสิ่งใด ๆ ที่จะถูกเรียกใช้ก่อนที่การกระทำใด ๆ จะดำเนินการ

ทั้งสองเหมือนกัน พวกเขาเป็นเพียงนามแฝงซึ่งกันและกันเพราะพฤติกรรมของพวกเขาเหมือนกัน


-3

หากต้องการทราบความแตกต่างระหว่าง before_action และ before_filter เราควรเข้าใจความแตกต่างระหว่างการกระทำและตัวกรอง

การกระทำเป็นวิธีการควบคุมที่คุณสามารถกำหนดเส้นทางไปยัง ตัวอย่างเช่นหน้าการสร้างผู้ใช้ของคุณอาจถูกส่งไปยัง UsersController # ใหม่ - ใหม่เป็นการดำเนินการในเส้นทางนี้

ตัวกรองทำงานในส่วนที่เกี่ยวกับการกระทำของคอนโทรลเลอร์ - ก่อนหลังหรือรอบตัว วิธีการเหล่านี้สามารถหยุดการประมวลผลการกระทำได้โดยการเปลี่ยนเส้นทางหรือตั้งค่าข้อมูลทั่วไปไปยังทุกการกระทำในคอนโทรลเลอร์

ราง 4 -> _action

ราง 3 -> _filter

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.