zer*_*uno 27 ruby-on-rails ruby-on-rails-4
我正在阅读pag中的"使用Rails 4进行敏捷Web开发".338它说:
[...]回调可以是被动的,监控由控制器执行的活动.他们还可以更积极地参与请求处理.如果before action回调返回false,则回调链的处理将终止,并且不会运行该操作.[...]
现在我的疑问如下:这里如果执行一个动作,如果before_action返回false,则告诉before_action的目标是在执行动作之前准备一些东西,如果它返回false则不表示动作是没有跑,但根据书,它是正确的...所以我有点困惑.
如果我正在尝试以下内容
class ProductsController < ApplicationController
before_action :test
def index
@products = Product.all
end
private
def test
return false
end
end
Run Code Online (Sandbox Code Playgroud)
但是执行动作,当我打电话时/products我没有收到任何错误,页面显示就好了
Sim*_*tti 49
before_action(以前命名before_filter)是在执行操作之前执行的回调.您可以在/ after_action之前阅读有关控制器的更多信息.
它通常用于准备操作或更改执行.
惯例是,如果链中的任何方法呈现或重定向,则暂停执行并且不呈现操作.
before_action :check_permission
def hello
end
protected
def check_permission
unless current_user.admin?
# head is equivalent to a rendering
head(403)
end
end
Run Code Online (Sandbox Code Playgroud)
在此示例中,如果current_user.admin?返回false,hello则永远不会执行操作.
相反,以下是动作设置的示例:
before_action :find_post
def show
# ...
end
def edit
# ...
end
def update
# ...
end
protected
def find_post
@post = Post.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)
在这种情况下find_post永远不会返回false.实际上,此before_action的目的是从操作主体中提取共享命令.
关于返回false,据我所知,这对于ActiveRecord回调是正确的.但对于before_action,返回false不起作用.实际上,官方文档中没有提到返回值.
| 归档时间: |
|
| 查看次数: |
22706 次 |
| 最近记录: |