============== #rails #tips
_[Mẹo hay]_ Viết filter phức tạp cho rails controller thì nên cho vào Filter class
Vd nếu bạn cần một filter phức tạp cho before_action
, rails có một dạng là nhận vào một class
class ApplicationController < ActionController::Base
before_action LoginFilter
end
class LoginFilter
def self.before(controller)
unless controller.send(:logged_in?)
controller.flash[:error] = "You must be logged in to access this section"
controller.redirect_to controller.new_login_url
end
end
end
Ở trên có thể thấy là class LoginFilter
đc truyền vào, lưu ý là ở đây class này có implement before
method
vì đây là before_
filter, nếu bạn dùng after_
filter thì phải implement after
, cuối cùng nếu dùng around
filter thì phải implement yield
.
Đây là một cách để nhóm các logic phức tạp vào một class và bạn có thể test riêng cái filter này dễ dàng mà không phải hit controller stack
=== END