- 浏览: 2072674 次
- 性别:
- 来自: NYC
文章分类
- 全部博客 (628)
- Linux (53)
- RubyOnRails (294)
- HTML (8)
- 手册指南 (5)
- Mysql (14)
- PHP (3)
- Rails 汇总 (13)
- 读书 (22)
- plugin 插件介绍与应用 (12)
- Flex (2)
- Ruby技巧 (7)
- Gem包介绍 (1)
- javascript Jquery ext prototype (21)
- IT生活 (6)
- 小工具 (4)
- PHP 部署 drupal (1)
- javascript Jquery sort plugin 插件 (2)
- iphone siri ios (1)
- Ruby On Rails (106)
- 编程概念 (1)
- Unit Test (4)
- Ruby 1.9 (24)
- rake (1)
- Postgresql (6)
- ruby (5)
- respond_to? (1)
- method_missing (1)
- git (8)
- Rspec (1)
- ios (1)
- jquery (1)
- Sinatra (1)
最新评论
-
dadadada2x:
user模型里加上 protected def email ...
流行的权限管理 gem devise的定制 -
Sev7en_jun:
shrekting 写道var pattern = /^(0| ...
强悍的ip格式 正则表达式验证 -
jiasanshou:
好文章!!!
RPM包rpmbuild SPEC文件深度说明 -
寻得乐中乐:
link_to其实就是个a标签,使用css控制,添加一个参数: ...
Rails在link_to中加参数 -
aiafei0001:
完全看不懂,不知所然.能表达清楚一点?
"$ is not defined" 的问题怎么办
先补充一个部分的代码用来说明这些回调在一些实际中的用法,
另这里有个Ruby On Rails验证大全你可能会关心
在看详细回调
通常在一个active record对象的生命周期里,有八个过程
这些stat是可以用来hook
下面是一个
回调的典型例子
有继承关系的回调
下面的情景是说,当在一个类中定义了回调。但,他有一个子类,又定义了一个回调。
然后,我们希望,
有些时候,回调继承执行。就是又要执行父类的回调,又要执行子类的回调。
有些时候,希望子类的回调,重写覆盖父类的回调。
那么,看看如何实现
回调的四种类型
在这其中,前两种是推荐的回调表达方式。块方法的回调有些时候,也比较合适。最后的一种,基本废弃。
回调的参数
回调方法的参数,是记录,根据传入的不同,灵活调用。
method missing的应用
回调的宏,默认下会等待一个符号,但当我们在符号部分,使用method missing时,就可以在预期估值的时候,执行绑定的回调。
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
good
感谢光临,动力啊,
补充完了剩下部分的翻译
class Profile < ActiveRecord::Base before_validation :archive#在验证之前判断, #为什么验证之前呢,因为如果是新建的话就不要验证了 before_destroy :destroy_validate#删除的时候验证 def archive return unless self.new_record? profile = Profile.find_by_name(self.name) unless profile.nil? profile.name = sprintf("a-%s", profile.id) profile.status = true unless profile.save return false end end end def validate#修改默认的验证 errors.add(:major_offset, "must be >= Minor Offset") unless major_offset >= minor_offset errors.add(:minor_offset, "must be <= Major Offset") unless minor_offset <= major_offset if Analyzer.count(:conditions => ["profile_id = ? and status= ?", self.id, Analyzer::INGRESS]) > 0 errors.add_to_base("One or more Analyzers are in Ingress Monitoring mode and use this profile. Edits are disabled until you stop Ingress Monitoring.") return false end end def destroy_validate#对应删除验证的描述 if Analyzer.count(:conditions => ["profile_id = ? ", self.id]) > 0 errors.add_to_base("One or more Analyzers use this profile, Delete are disabled.") return false end if SwitchPort.exists?(:profile_id=> self.id) errors.add_to_base("One or more Analyzers use this profile, Delete are disabled.") return false end end end
另这里有个Ruby On Rails验证大全你可能会关心
在看详细回调
通常在一个active record对象的生命周期里,有八个过程
引用
(-) save
(-) valid?
(1) before_validation
(2) before_validation_on_create
(-) validate
(-) validate_on_create
(3) after_validation
(4) after_validation_on_create
(5) before_save
(6) before_create
(-) create
(7) after_create
(8) after_save
(-) valid?
(1) before_validation
(2) before_validation_on_create
(-) validate
(-) validate_on_create
(3) after_validation
(4) after_validation_on_create
(5) before_save
(6) before_create
(-) create
(7) after_create
(8) after_save
这些stat是可以用来hook
下面是一个
回调的典型例子
class CreditCard < ActiveRecord::Base # 这个例子用来说明预先处理信用卡数据,作用是在验证 # 以前把输入的数据中不是数字的输入,屏蔽掉。就是把 "555 234 34"或者 # "5552-3434" 都转换成 "55523434" def before_validation_on_create self.number = number.gsub(/[^0-9]/, "") if attribute_present?("number") end end class Subscription < ActiveRecord::Base #这是另一个回调的例子,是在创建的时候,积累时间。 #当然,这里是示例,没有人需要这个功能 before_create :record_signup private def record_signup self.signed_up_on = Date.today end end class Firm < ActiveRecord::Base # 下面的例子也经常用就是相关删除。很多时候,这件事应该是dependent => :destroy # 来完成,当然,还有些时候比较复杂的回调,就会用到类似的方法 # 当firm公司删除时,同时删除对应员工(Person)和客户(Client) before_destroy { |record| Person.destroy_all "firm_id = #{record.id}" } before_destroy { |record| Client.destroy_all "client_of = #{record.id}" } end
有继承关系的回调
下面的情景是说,当在一个类中定义了回调。但,他有一个子类,又定义了一个回调。
然后,我们希望,
有些时候,回调继承执行。就是又要执行父类的回调,又要执行子类的回调。
有些时候,希望子类的回调,重写覆盖父类的回调。
那么,看看如何实现
#这样的话,将实现回调的继承和队列调用 class Topic < ActiveRecord::Base before_destroy :destroy_author end class Reply < Topic before_destroy :destroy_readers end #也就是说,当Topic#destroy调用的时候 destroy_author将被执行。而,当Topic#destroy被执行的时候destroy_author和 destroy_readers将都被调用 #------------------------------------------------------------------------- #下面的方法,将导致覆盖 class Topic < ActiveRecord::Base def before_destroy() destroy_author end end class Reply < Topic def before_destroy() destroy_readers end end #这个时候,当Reply#destroy被调用时候将只调用destroy_readers将不会调用 destroy_author. #-------------------------------------------------------------------------
回调的四种类型
- Method references (符号),
- callback objects(最常用吧),
- inline methods (使用块方法),
- and inline eval methods (字符串).
在这其中,前两种是推荐的回调表达方式。块方法的回调有些时候,也比较合适。最后的一种,基本废弃。
class Topic < ActiveRecord::Base #这是标准的使用,把回调的方法本身,限制为private或者protected before_destroy :delete_parents private def delete_parents self.class.delete_all "parent_id = #{id}" end end
回调的参数
回调方法的参数,是记录,根据传入的不同,灵活调用。
class BankAccount < ActiveRecord::Base before_save EncryptionWrapper.new("credit_card_number") after_save EncryptionWrapper.new("credit_card_number") after_initialize EncryptionWrapper.new("credit_card_number") end class EncryptionWrapper def initialize(attribute) @attribute = attribute end def before_save(record) record.credit_card_number = encrypt(record.credit_card_number) end def after_save(record) record.credit_card_number = decrypt(record.credit_card_number) end alias_method :after_find, :after_save private def encrypt(value) # Secrecy is committed end def decrypt(value) # Secrecy is unveiled end end
method missing的应用
回调的宏,默认下会等待一个符号,但当我们在符号部分,使用method missing时,就可以在预期估值的时候,执行绑定的回调。
class Topic < ActiveRecord::Base #实现act as tree的级联删除 before_destroy 'self.class.delete_all "parent_id = #{id}"' end class Topic < ActiveRecord::Base before_destroy 'self.class.delete_all "parent_id = #{id}"', 'puts "Evaluated after parents are destroyed"' end
- * after_create
- * after_destroy
- * after_save
- * after_update
- * after_validation
- * after_validation_on_create
- * after_validation_on_update
- * before_create
- * before_destroy
- * before_save
- * before_update
- * before_validation
- * before_validation_on_create
- * before_validation_on_update
http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html
评论
4 楼
Hooopo
2009-08-20
good!
3 楼
夜鸣猪
2009-06-17
wxmfly 写道
good
感谢光临,动力啊,
补充完了剩下部分的翻译
2 楼
wxmfly
2009-06-17
good
1 楼
xu_ch
2009-06-15
发表评论
-
Destroying a Postgres DB on Heroku
2013-04-24 10:58 928heroku pg:reset DATABASE -
VIM ctags setup ack
2012-04-17 22:13 3255reference ctags --extra=+f --e ... -
alias_method_chain方法在3.1以后的替代使用方式
2012-02-04 02:14 3288alias_method_chain() 是rails里的一个 ... -
一些快速解决的问题
2012-01-19 12:35 1470问题如下: 引用Could not open library ... -
API service 安全问题
2011-12-04 08:47 1380这是一个长期关注的课题 rest api Service的 ... -
Module方法调用好不好
2011-11-20 01:58 1344以前说,用module给class加singleton方法,和 ... -
一个ajax和rails交互的例子
2011-11-19 01:53 1903首先,这里用了一个,query信息解析的包,如下 https: ... -
Rails 返回hash给javascript
2011-11-19 01:43 2272这是一个特别的,不太正统的需求, 因为,大部分时候,ajax的 ... -
关于Rubymine
2011-11-18 23:21 2263开个帖子收集有关使用上的问题 前一段时间,看到半价就买了。想 ... -
ruby中和javascript中,动态方法的创建
2011-11-18 21:01 1234class Klass def hello(*args) ... -
textmate快捷键 汇总
2011-11-16 07:20 8138TextMate 列编辑模式 按住 Alt 键,用鼠标选择要 ... -
Ruby面试系列六,面试继续面试
2011-11-15 05:55 2018刚才受到打击了,充分报漏了自己基础不扎实,不肯向虎炮等兄弟学习 ... -
说说sharding
2011-11-13 00:53 1481这个东西一面试就有人 ... -
rails面试碎碎念
2011-11-12 23:51 1939面试继续面试 又有问ru ... -
最通常的git push reject 和non-fast forward是因为
2011-11-12 23:29 17209git push To git@github.com:use ... -
Rails 自身的many to many关系 self has_many
2011-11-12 01:43 2732简单点的 #注意外键在person上people: id ... -
Rails 3下的 in place editor edit in place
2011-11-12 01:20 945第一个版本 http://code.google.com/p ... -
Heroku 的诡异问题集合
2011-11-11 07:22 1692开个Post记录,在用heroku过程中的一些诡异问题和要注意 ... -
SCSS 和 SASS 和 HAML 和CoffeeScript
2011-11-07 07:52 12952Asset Pipeline 提供了内建 ... -
Invalid gemspec because of the date format in specification
2011-11-07 02:14 2115又是这个date format的错误。 上次出错忘了,记录下 ...
相关推荐
文件中会介绍 `validates` 方法的不同校验选项,如 `presence`、`uniqueness` 和 `format`,以及 `before_save`、`after_create` 等回调方法。 3. **深入浅出说路由**: 路由是 Rails 应用的心脏,定义了 URL 如何...
- **回调**:解释ActiveRecord中可用的生命周期回调,以及如何利用这些回调增强模型的功能。 - **迁移**:介绍如何使用迁移来管理和维护数据库结构的变化。 #### ActiveRecord迁移 - **迁移概述**:解释迁移的概念...
- **定义**:回调是在特定事件发生前后自动执行的代码块。 - **用途**:可用于在保存或删除记录前执行额外的逻辑处理。 ### 总结 通过以上介绍,我们不仅了解了Rails的基础知识,还深入探讨了其核心组件——Active...
继续深化 ActiveRecord 的使用,本章探讨了一些高级主题,如验证、回调、聚合查询等。 - **验证**:确保数据的有效性和一致性。 - **回调**:在特定事件发生时执行自定义逻辑。 - **聚合查询**:使用 SQL 聚合函数...
内容包括模型的基础操作、深入探讨模型查询、模型关联关系、模型校验以及回调函数的使用。 第五章“Rails中的控制器”,关注的是MVC架构中的控制器层。通过控制器层,开发者可以处理用户的输入,并将请求传递给模型...
你可以使用`before_action`和`after_action`等回调方法进行预处理和后处理。 7. **测试驱动开发(TDD)**:Rails提倡TDD,提供了RSpec和MiniTest等测试框架,鼓励开发者先写测试再编写功能代码,确保代码质量。 8....
示例 Rails OAuth 2 应用程序 这个 repo 包含如何将 OAuth 2 添加到 Rails 应用程序的示例,该应用程序围绕与我们简单的 BCrypt/注册/会话身份验证系统相同的基本结构... 授权回调地址: http://localhost:9888/oauth
9. **ActiveSupport库**:讲解Rails提供的各种实用工具和方法,如时间辅助方法、内省和回调。 10. **资产管道**:介绍如何管理JavaScript、CSS和其他前端资源,包括Sprockets和CoffeeScript。 11. **会话与cookies...
例如,使用jQuery,你可以设置`success`或`complete`回调函数来处理响应: ```javascript $('body').on('ajax:success', '#delete_link', function(e, data, status, xhr) { $(this).closest('tr').remove(); }); ...
注册期间,请确保回调URL的值如下: http://localhost:3000/users/auth/fitbit/callback 注册后,您应该可以访问CLIENT ID和CLIENT SECRET值以放入config/secrets.yml 。 入门 克隆此存储库。 运行bin/setup 。 ...
6. **处理回调事件**:集成Stripe的 webhook 事件处理,以响应支付状态的变化,如支付成功、失败或退款。 7. **Plaid集成**(如果适用):引入Plaid的Gem,实现Plaid Link工具,让用户安全地链接其银行账户。 8. *...
20.2 回调 303 20.3 高级属性 308 20.4 事务 311 第21章 ActionController:路由与URL 317 21.1 基础 317 21.2 请求的路由 318 21.3 基于资源的路由 329 21.4 路由的测试 342 第22章 ActionController和Rails 345 ...
你将学习如何定义控制器行动,以及如何在行动中使用`before_action`和`after_action`回调。 8. **用户身份验证**:为了实现用户登录功能,你可能需要引入如Devise这样的第三方gem,或者手动编写登录、注册和会话...
在这个例子中,模型可能包含了表示状态变化的属性和与StateMachine相关的回调方法。 5. **控制器(Controller)**:控制器处理HTTP请求,调用模型方法,并将结果传递给视图。在多步骤表单中,控制器会管理用户的...
3. **处理响应**:React 组件通过 API 调用获取数据后,可以更新组件状态或调用回调函数传递数据给父组件。 4. **错误处理**:添加错误捕获机制,确保在 API 请求失败时,应用能够优雅地处理错误并反馈给用户。 这...
3. **事件回调**:jQuery AutoComplete提供了丰富的事件回调函数,如`open`、`focus`、`select`等,这些函数可以用来定制交互行为,例如在用户选择一个建议项后执行特定的操作。 4. **自定义样式和模板**:通过CSS...
然后,我们需要在Devise的session控制器中添加OmniAuth回调。打开`app/controllers/devise/sessions_controller.rb`,并添加如下代码: ```ruby class Devise::SessionsController prepend_before_action :allow_...
身份验证 一个 Rails 引擎,可以轻松将 Rails 站点的身份验证委托给 。 有关使用此 gem 的示例,请参阅项目。... 创建一个新应用程序,并将回调 URL 设置为http://localhost:3001/auth/so/callback 。 如
`查询方法提升了查询性能,同时`update_columns`方法允许在不触发回调的情况下更新记录。 二、ActionController:控制层增强 Rails 5的ActionController模块提供了对HTTP请求的处理。其中,强参数(Strong ...
7. **回调(Callbacks)**: 回调允许在特定操作(如创建、更新或删除)前后执行自定义逻辑。例如,`before_save :update_name_capitalization`会在保存前自动将名字首字母大写。 8. **事务(Transactions)**: 通过...