几个控制器中的before_filter

时间:2013-12-03 11:01:56

标签: ruby-on-rails ruby-on-rails-4 before-filter

我想在以下控制器中的少数特定操作中使用一个名为before_filter的{​​{1}}:

:realtor_suscriber

我在realtors/registrations_controller.rb realtors/sessons_controller.rb pro/messages_controller.rb pro/users_controller.rb

中定义了realtor_suscriber
realtors/registrations_controller.rb

当然,它不适用于其他控制器中的操作(例如pro / messages_controller.rb)

我不想在application_controller.rb中定义realtor_suscriber,因为我有一些其他控制器,他们不需要这个def realtor_suscriber! ....my code here... end ,我想避免在所有其他控制器中使用before_filter

感谢您提前,

F。

4 个答案:

答案 0 :(得分:1)

您可以在realtor_suscriber!中定义ApplicationController方法并添加

before_filter :realtor_suscriber!

在那些需要它的控制器中。

答案 1 :(得分:0)

您可以在跳过特定控制器的应用程序控制器中定义它

def realtor_suscriber!
  if (params[:controller]=="posts" && %w(new edit show).include?(params[:action])) ||
     (params[:controller]=="comments" && %w(create update destroy).include?(params[:action])) ||
     (params[:controller]=="reviews" && %w(like share tweet).include?(params[:action]))
  return # list out all the controller/action pairs which needs to be skipped.
  #....your code here...
end

答案 2 :(得分:0)

使用以下

before_filter :realtor_suscriber!, :only => [:abc, :pqr]
#Where abc, pqr are the methods for which you want filter

OR

before_filter :realtor_suscriber!, :except => [:xyz, :rst]
#Where xyz, rst are the methods for which you don't want filter

答案 3 :(得分:0)

这很简单,只需在ApplicationController中定义方法并将其用作子控制器中的过滤器。

子控制器继承自ApplicationController,因此它们始终可以访问此方法。而且您不需要在ApplicationController中定义这样的过滤器。