Ruby on rails Rails:使用参数从before筛选器调用函数
我试图使用before过滤器来阻止未经批准的用户访问页面 为了检查未经批准的用户,我在/lib文件夹的.rb文件中定义了一个方法(我在不同的控制器和视图中有几个方法)。方法是检查用户是否获得当前批准(用户id) 在我的控制器中,我尝试了以下变化(注意,我使用RubyMine作为IDE,但它并没有告诉我我有语法错误): 这给了我以下错误消息:Ruby on rails Rails:使用参数从before筛选器调用函数,ruby-on-rails,before-filter,Ruby On Rails,Before Filter,我试图使用before过滤器来阻止未经批准的用户访问页面 为了检查未经批准的用户,我在/lib文件夹的.rb文件中定义了一个方法(我在不同的控制器和视图中有几个方法)。方法是检查用户是否获得当前批准(用户id) 在我的控制器中,我尝试了以下变化(注意,我使用RubyMine作为IDE,但它并没有告诉我我有语法错误): 这给了我以下错误消息: NoMethodError in PaymentsController#new private method `check_user_for_curren
NoMethodError in PaymentsController#new
private method `check_user_for_current_approval' called for #<PaymentsController:0x007ff06784f148>
产生以下错误:
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上看到的答案。为什么不使用符号来定义要调用的方法 e、 g.付款控制人:
before_filter :check_user_for_current_approval, :only => :new
def check_user_for_current_approval; raise "Called"; end
使用第一种方法,但要公开
检查用户是否获得当前批准
此外:
我认为共享的before_filter
更适合应用程序控制器,而不是lib文件。
这将使扩展应用程序控制器的所有控制器都可以访问它,这通常是所有其他控制器都可以访问的。您是否尝试使用会话,会话中有id
,而不是将其作为参数传递到过滤器中?这样,sintax将只是before\u filter:check\u user\u以获得\u current\u批准,:only=>[:new]
。答案提供了一个适用于所有方法的解决方案,而不仅仅是一个可以从内部调用当前_user.id的方法。将其声明为公共有效。您的意思是将当前审批方法的检查用户放在应用程序控制器中?这也是我在一些观点中使用的一种方法。我想我不明白你的答案。这将不允许我向方法传递参数。
before_filter(:only => [:new]) { check_user_for_current_approval(current_user.id) }
before_filter :check_user_for_current_approval, :only => :new
def check_user_for_current_approval; raise "Called"; end