我是初学者,我有一个让我困惑的基本问题,即
例如我们在rails 4中有before_action和after_action但我们称之为过滤器,为什么? 我在某地读过过滤器是针对控制器而动作是针对模型的,是吗?
答案 0 :(得分:2)
好的,这就是我看到的东西:
1:动作是您可以路由到的控制器的方法。例如,您的用户创建页面可能会路由到UsersController#new
- 这是此路线中的操作。
2:过滤器针对控制器操作运行 - 在它们之前,之后或周围。这些方法可以通过将公共数据重定向或设置到控制器中的每个操作来暂停操作处理。 例如:
before_action :require_logged_out, only: [:new]
def require_logged_out
redirect_to user_path(current_user) if logged_in?
end
所以在这里,require_logged_out
是一个在用户控制器的新操作之前运行的过滤器。
3:最后我会在Rails中提到3.x *_action
过滤器已通过*_filter
定义。例如,您设置了before_filter
而不是before_action
。
我认为应该为你提供关于rails中的操作和过滤器的内容。
答案 1 :(得分:1)
操作是过滤器的rails 4.0名称。他们做了完全相同的事情,但before_action是一个更明确的行为名称。
这是代码中更改名称的位置。 https://github.com/rails/rails/commit/9d62e04838f01f5589fa50b0baa480d60c815e2c
以下是关于此事的另一个讨论的链接。 Rails 4: before_filter vs. before_action