我正在尝试使用之前的过滤器来阻止未经批准的用户访问页面。
要检查未经批准的用户,我在/ lib文件夹中的.rb文件中定义了一个方法(我有几种方法,我在各种控制器和视图中)。方法是check_user_for_current_approval(user_id)。
在我的控制器中,我尝试了以下变体(注意我使用RubyMine作为IDE,它没有给我一个表明我有语法错误的指示):
before_filter(:only => [:new]) do |c|
c.check_user_for_current_approval current_user.id
end
这给了我以下错误消息:
NoMethodError in PaymentsController#new
private method `check_user_for_current_approval' called for #<PaymentsController:0x007ff06784f148>
以下语法:
before_filter(:only => [:new]) do |c|
c.send (:check_user_for_current_approval, current_user.id)
end
产生此错误:
SyntaxError in PaymentsController#new
/app/controllers/payments_controller.rb:9: syntax error, unexpected ',', expecting ')'
c.send (:check_user_for_current_approval, current_user.id)
^
/app/controllers/payments_controller.rb:9: syntax error, unexpected ')', expecting keyword_end
/app/controllers/payments_controller.rb:130: syntax error, unexpected $end, expecting keyword_end
使用以下语法:
before_filter(:only => [:new]) { check_user_for_current_approval(current_user.id) }
带我直接进入页面(过滤器无效)。不同的陈述来自我在StackOverflow上看到的答案。
答案 0 :(得分:1)
使用您的第一种方法,但公开check_user_for_current_approval
。
此外:
我认为共享before_filter
更适合应用程序控制器,而不是lib文件。
这将使扩展应用程序控制器的所有控制器都可以访问它,通常所有其他控制器都可以这样做。
答案 1 :(得分:0)
为什么不使用符号来定义要调用的方法?
e.g。 PaymentsController:
before_filter :check_user_for_current_approval, :only => :new
def check_user_for_current_approval; raise "Called"; end