【问题标题】:Difference between actions and filters in railsrails中动作和过滤器的区别
【发布时间】:2014-01-15 15:44:16
【问题描述】:

我是初学者,我有一个非常基本的问题让我感到困惑,即

  • 操作和过滤器有什么区别?

例如,我们在 rails 4 中有 before_action 和 after_action,但我们称它们为过滤器,为什么? 我在某处读到过滤器用于控制器,而操作用于模型,是吗?

【问题讨论】:

  • 感谢您的回答,但我的问题有所不同,我的意思是问为什么我们称它们为过滤器,过滤器和操作之间有什么区别,以及在哪里使用它们。显然动作和过滤器不是一回事,弃用似乎只在少数情况下。
  • 我猜下面的提交回答了你的问题。 github.com/rails/rails/commit/… 是一样的。据我了解,使用 *_actions 具有误导性,但不被视为无效/已弃用。
  • 对于模型有 ActiveRecord 回调api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
  • 不,我了解 before_action 和 before_filter 之间的区别,但我的问题是关于操作和过滤器,而不是 *_action 和 *_filter。过滤器只能用作 *_filters 吗?

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

Actions 是过滤器的 rails 4.0 名称。他们做同样的事情,但 before_action 是一个更清晰的行为名称。

这是在代码中更改名称的地方。 https://github.com/rails/rails/commit/9d62e04838f01f5589fa50b0baa480d60c815e2c

这里是关于此问题的另一个讨论的链接。 Rails 4: before_filter vs. before_action

【讨论】:

    【解决方案2】:

    好的,这就是我的看法:

    1:动作是您可以路由到的控制器的方法。例如,您的用户创建页面可能会路由到 UsersController#new - 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 中的操作和过滤器的内容。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-29
    • 2017-04-28
    • 2016-10-27
    • 2019-08-29
    • 2015-05-29
    • 2019-05-01
    • 2019-02-11
    • 1970-01-01
    相关资源
    最近更新 更多