Rails 4: before_filter so với before_action


340

Trong ray> 4.0.0 máy phát điện tạo ra các hoạt động CRUD với before_actionkhông before_filter. Nó dường như làm điều tương tự. Vậy sự khác biệt giữa hai điều này là gì?

Câu trả lời:


521

Như chúng ta có thể thấy trong ActionController::Base, before_actionchỉ là một cú pháp mới cho before_filter.

Tuy nhiên, tất cả before_filterscú pháp không được dùng trong Rails 5.0 và sẽ bị xóa trong Rails 5.1


42
Một mặt không có ý nghĩa nhưng mặt khác có một thực tiễn tốt trong đường ray và trong ruby ​​để có một số bí danh cho một phương thức để bạn có thể sử dụng nó trong các bối cảnh khác nhau mà không mất ý nghĩa.
freemanoid

4
Trong 4.2 Họ không phản đối nó, nhưng loại bỏ nó khỏi các tài liệu vì nó không được khuyến khích. edgeguides.rubyonrails.org/ từ
onetwopunch

17
Nếu nó không được khuyến khích, thì tại sao bạn không từ chối nó? Ngớ ngẩn.
Grant Birchmeier

4
@JohnWhitley - sự phản đối không phá vỡ API. Đó là toàn bộ sự phản đối.
Grant Birchmeier

9
@JohnWhitley - Việc spam là vì một lý do. Bất kỳ dự án có kỷ luật tốt nên giải quyết các cảnh báo khấu hao bằng cách không sử dụng các chức năng không dùng nữa .
Grant Birchmeier

67

Đó chỉ là sự khác biệt về cú pháp, trong ứng dụng rails có CRUD và bảy hành động về cơ bản theo chỉ mục tên , mới , tạo , hiển thị , cập nhật , chỉnh sửa , hủy .

Rails 4 làm cho nhà phát triển thân thiện để thay đổi cú pháp trước khi lọc thành trước khi hành động .

phương thức gọi before_action trước các hành động mà chúng ta khai báo, như

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

set_event là một phương thức sẽ gọi luôn trước khi hiển thị, cập nhật, chỉnh sửa và hủy.


31

Nó chỉ là một sự thay đổi tên. before_actioncụ thể hơn, bởi vì nó được thực thi trước một hành động.


1

before_filter / before_action: có nghĩa là mọi thứ sẽ được thực thi trước khi bất kỳ hành động nào được thực thi.

Cả hai đều giống nhau. họ chỉ là bí danh cho nhau vì hành vi của họ là như nhau.


-3

Để tìm ra sự khác biệt giữa before_action và before_filter, chúng ta nên hiểu sự khác biệt giữa hành động và bộ lọc.

Một hành động là một phương thức của bộ điều khiển mà bạn có thể định tuyến tới. Ví dụ: trang tạo người dùng của bạn có thể được định tuyến đến UsersContoder # new - mới là hành động trong tuyến đường này.

Các bộ lọc chạy đối với các hành động của bộ điều khiển - trước, sau hoặc xung quanh chúng. Các phương thức này có thể tạm dừng xử lý hành động bằng cách chuyển hướng hoặc thiết lập dữ liệu chung cho mọi hành động trong bộ điều khiển.

Đường ray 4 -> _action

Đường ray 3 -> _filter

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.