2011-07-23 25 views
8

Trong ray 2.8 chúng ta có thể viết skip_before_filter như thế nàyRails 3 cách để làm skip_before_filter,: chỉ

skip_before_filter :require_login, :only => [:create,:new,:accept] 

có nghĩa là, tôi muốn áp dụng bộ lọc require_login chỉ để những hành động này [:create,:new,:accept], và bỏ qua các bộ lọc cho người khác .

Nhưng có vẻ như, theo cách này là deprecated trong đường ray 3. Và mới skip_filter được thêm vào. tôi đã cố gắng này

skip_filter :require_login, :only => [:create,:new,:accept] 

nhưng nó không làm việc, vậy làm thế nào tôi có thể làm điều này trong đường ray 3.

Trả lời

11
  • skip_before_filter đã không được dùng nữa see source.

  • Bạn đang sử dụng như mong đợi.

Vậy làm thế nào bạn suy luận rằng nó không hoạt động đúng?

+0

vâng, đó là sai lầm của tôi .. dint nhìn thấy nó .. thanks :) – RameshVel

+0

: D Tôi thường phải đối mặt với cùng một loại tình huống;) – apneadiving

14

Đó là việc sử dụng không chính xác skip_before_filter.

Để áp dụng bộ lọc require_login dành riêng cho các hành động [:create,:new,:accept], và bỏ qua các bộ lọc cho những người khác, trước tiên bạn phải áp dụng bộ lọc:

before_filter :require_login 

Sau đó, bạn phải nói với đường ray để bỏ qua bộ lọc này trừ cho hành động "tạo, mới và chấp nhận".

skip_before_filter :require_login, :except => [:create,:new,:accept] 

bạn cũng có thể sử dụng skip_filter, cho phép bạn để bao gồm before_filter, after_filter, và around_filter lọc:

skip_filter :require_login, :except => [:create,:new,:accept] 

tham khảo: Rails 3.2 guide

Trong Rails 4.0, các phương pháp tương đương là: before_action và: skip_before_action.

tham khảo: Rails 4.0 guide

+0

Đây là thông tin tốt cảm ơn bạn. – dps