繁体   English   中英

在rails 4.01上的ruby中的回调和过滤器

[英]callbacks and filters in ruby on rails 4.01

我从最近2-3个月开始学习rails,我遇到了一些rails的概念。 回调和过滤器是我不清楚的概念。 我也读过很多相同的文件,但我真的很困惑。 有人请清除我的怀疑。

过滤器与Rails中的回调

过滤器:过滤器是在控制器操作之前,之后或“周围”运行的方法

before_action在请求到达控制器的操作之前对请求运行过滤器之前例如:在授予用户访问权限之前验证用户的身份验证

after_action在操作完成后运行过滤器。

around_action过滤器可能在运行操作之前和之后具有逻辑。 您可以使用周围的过滤器进行异常处理,设置和拆卸以及无数其他情况。

回调 :回调允许您在模型中更改对象状态之前或之后触发逻辑。

可以编写将在从数据库创建,保存,更新,删除,验证或加载Active Record对象时运行的代码。

创建一个对象

before_validation
after_validation
before_save
around_save
before_create
around_create
after_create
after_save
after_commit/after_rollback

更新对象

before_validation
after_validation
before_save
around_save
before_update
around_update
after_update
after_save
after_commit/after_rollback

摧毁一个物体

before_destroy
around_destroy
after_destroy
after_commit/after_rollback

回调是在操作对象时运行的钩子。 例如,如果您定义

class Foo < ActiveRecord::Base
  after_create :do_something

  def so_something
    Rails.logger.error "I do something"
  end
end

当创建foo对象时,这将在日志中显示一条消息。

过滤器是一组关于条件的对象。 例如 :

Foo.where(:name => "Bar")

只会选择名为"Bar" foo对象。 如果多次使用过滤器,则可以在模型中声明特定范围:

class Foo
  scope :bar, -> { where(:name => "Bar") }
end

Foo.bar # equivalent to previous line

或者更有趣:

class Foo
  scope :having_name, -> (n) { where(:name => n })
end

Foo.having_name("Bar") # equivalent too !

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM