Ruby on rails 围绕回调堆栈中的\u操作进行Rails
我刚刚发现了一些行动回调。我真的不明白这些回调如何与其他回调一起工作,尤其是与在动作之前使用Ruby on rails 围绕回调堆栈中的\u操作进行Rails,ruby-on-rails,Ruby On Rails,我刚刚发现了一些行动回调。我真的不明白这些回调如何与其他回调一起工作,尤其是与在动作之前使用(append)或回调之前使用prepend\u相比,调用堆栈看起来如何。around操作回调是否适合这样的访问控制: ApplicationController < ... around_action :access_control private def access_control if @authorized yield else # Show er
(append)或回调之前使用prepend\u相比,调用堆栈看起来如何。around操作回调是否适合这样的访问控制:
ApplicationController < ...
around_action :access_control
private
def access_control
if @authorized
yield
else
# Show error page
end
end
class AdminController < ApplicationController
before_action :authorize_admins
private
def authorize_admins
if current_user.admin?
@authorizez = true
end
end
ApplicationController<。。。
环绕行动:访问控制
私有的
def访问控制
如果@authorized
产量
其他的
#显示错误页
结束
结束
类AdminController<应用程序控制器
在\u操作之前:授权\u管理员
私有的
def授权\u管理员
如果是当前的_user.admin?
@Z=true
结束
结束
环绕动作的行为是否类似于动作前追加动作
+动作后追加动作
或动作前追加动作
+动作后追加动作
或者其他一些不同的东西?围绕动作
更像是在动作之前追加动作
+在动作之后追加动作
在内部,可以把它想象成rails有两个数组,@before\u actions
和@after\u actions
。因此,当您在动作前后声明时,它会将其推送到动作前的@结尾处,并将其取消移动到动作后的@结尾处
通过以下快速测试:
class SomeController < ApplicationController
before_action :before_action
after_action :after_action
around_filter :around_action
def before_action
$stderr.puts "From before_action"
end
def after_action
$stderr.puts "From after_action"
end
def around_action
begin
$stderr.puts "From around_action before yielding"
yield
$stderr.puts "From around_action after yielding"
end
end
def index
end
end
append
和prepend
有点不同。我不会从这个角度来看待这个问题。事实上,你的问题没有意义。环绕动作的行为与放置在同一位置的动作前+动作后相同。(before(after)\u filter
与Rails 4中的before(after)\u action
相同)@chumakoff我知道append\u before\u action
是before\u action
的别名,after\u action的别名相同?我正在使用操作
和回调
重写所有内容,以获得更清晰的信息。您的意思是,如果控制器将具有以下过滤器:在动作之后:操作1
<代码>围绕动作:动作2
然后action2
将在action1
之前完成?是的,请在更新中查看示例代码和输出。你的权利,伙计!它就像ActhEngRoD中的<代码> AdOrth.< /Cord>回调。然后考虑它的答案。
Started GET "/" for 127.0.0.1 at 2016-03-21 17:11:01 -0700
Processing by SomeController#index as HTML
From before_action
From around_action before yielding
Rendered some/index.html.slim within layouts/index (1.5ms)
From around_action after yielding
From after_action