Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:使用参数从before筛选器调用函数_Ruby On Rails_Before Filter - Fatal编程技术网

Ruby on rails Rails:使用参数从before筛选器调用函数

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

我试图使用before过滤器来阻止未经批准的用户访问页面

为了检查未经批准的用户,我在/lib文件夹的.rb文件中定义了一个方法(我在不同的控制器和视图中有几个方法)。方法是检查用户是否获得当前批准(用户id)

在我的控制器中,我尝试了以下变化(注意,我使用RubyMine作为IDE,但它并没有告诉我我有语法错误):

这给了我以下错误消息:

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