Rails源码研究之ActionController:五,cookies
cookies.rb: module ActionController module Cookies protected def cookies CookieJar.new(self) end end class CookieJar < Hash def initialize(controller) @controller, @cookies = controller, controller ...
Rails源码研究之ActionController:四,session
我们知道Rails默认使用file来存储session数据,放在tmp\sessions目录下 其实我们还可以使用数据库、drb_server、mem_cache甚至内存来存储session数据 方法就是更改environment.rb: config.action_controller.session_store = :active_record_store || :drb_store || : ...
Rails源码研究之ActionController:三,scaffolding
Rails里富有Magic的东西往往实现起来非常简单,比如scaffolding 看看代码先,scaffolding.rb: module ActionController module Scaffolding def self.included(base) base.extend(ClassMethods) end module ClassMethods def scaffold(model_i ...
Rails源码研究之ActionController:二,routing
满城尽带黄金甲,源码尽在routing.rb: module ActionController module Routing class Route attr_accessor :segments, :requirements, :conditions end class RouteBuilder def build(path, options) path = "/#{path}&quo ...
Rails源码研究之ActionController:一,基本架构、render、redirect
1,action_controller.rb: $:.unshift(File.dirname(__FILE__)) unless $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__))) unless defined?(ActiveSupport) begin $:.u ...
Rails源码研究之ActiveRecord:六,Acts
ActiveRecord自带了三种数据结构关系:acts_as_tree、acts_as_list、acts_as_nested_set 1,tree.rb module ActiveRecord module Acts module Tree def self.included(base) base.extend(ClassMethods) end module ClassMethods de ...
Rails源码研究之ActiveRecord:五,Callbacks
Callbacks相关的源码在callbacks.rb文件里: module ActiveRecord module Callbacks CALLBACKS = %w( after_find after_initialize before_save after_save before_create after_create before_update after_update before_val ...
Rails源码研究之ActiveRecord:四,Validations
Validations相关的源码全在validations.rb文件里: module ActiveRecord class Errors include Enumerable @@default_error_messages = { :inclusion => "is not included in the list", :exclusion => "i ...
Rails源码研究之ActiveRecord:三,Transactions
这次我们分析一下Rails的事务支持 1,Rails默认将父子关系的表的save()和destroy()包装在一个事务里(见AWDWR一书的Transactions) 这保证了父子保存和删除的原子性,即ActiveRecord是级联保存和级联删除的,有源码为证 transactions.rb: module ActiveRecord module Transactions def self.inc ...
Rails源码研究之ActiveRecord:二,Associations
今天学习一下ActiveRecord的Associations相关的源码,即了解一下我们常用的has_many、has_one、belongs_to、has_and_belongs_to_many的原理 1,activerecord-1.15.3\lib\active_record\associations.rb: require 'active_record/associations/asso ...
Rails源码研究之ActiveRecord:一,基本架构、CRUD封装与数据库连接
Rails的ORM框架ActiveRecord是马大叔的ActiveRecord模式的实现+associations+SingleTableInheritance ActiveRecord的作者也是Rails的作者--David Heinemeier Hansson ActiveRecord的key features: 1,零Meta Data,不需要XML配置文件 2,Database Suppo ...
每天一剂Rails良药之acts_as_ferret
Ferret是Ruby的文本搜索引擎,它基于Apache Lucene 安装Ferret非常简单: gem install ferret Ferret是一堆C代码的Ruby代码封装,Ferret是针对Ruby的而不是RoR的 而Acts As Ferret则是针对RoR的 我们有两种方式安装Acts As Ferret: 1,以gem方式安装 gem install acts_as_fe ...
每天一剂Rails良药之upload_progress
今天来看看使用upload_progress插件监听文件上传status以及创建AJAX上传progress bar Requirements:http://sean.treadway.info/articles/2005/07/18/upload-progress-checklist 安装好该插件以及Requirements后,我们就可以在controller里使用了: class Docum ...
每天一剂Rails良药之tztime
以前我们这样使用TimeZone: class TasksController < ApplicationController def create task = account.tasks.build(params[:task]) task.alert_at = current_user.time_zone.local_to_utc(task.alert_at) task.save! en ...
每天一剂Rails良药之tzinfo_timezone
Dealing With Time-zones一文中介绍了Rails的TimeZone类,它可以用来转换不同时区的本地时间 今天看看tzinfo_timezone插件,它是对TZInfo库的封装,我们需要首先运行gem install tzinfo来安装tzinfo 该插件安装了一个TimeZone类的replacement类,然后我们使用local_to_utf和utc_to_local方法来替代 ...
每天一剂Rails良药之token_generator
这个插件让我们给使用它的当前class添加一个使用MD5生成的token class Invitation < ActiveRecord::Base include TokenGenerator before_create :set_token end class ImperialInvitation < ActiveRecord::Base include TokenGenerato ...
每天一剂Rails良药之ssl_requirement
ssl_requirement插件让我们指定哪些action需要SSL访问,哪些不需要,并且帮我们redirect到相应的URL 安装好插件后,首先在application.rb里include该插件 class ApplicationController < ActionController include SslRequirement end 然后在controller里我们指定需要和 ...
每天一剂Rails良药之scaffolding
对于如下代码: class WeblogController < ActionController::Base scaffold :entry end 这将生成如下代码: class WeblogController < ActionController::Base verify :method => :post, \:only => [ :destroy, :crea ...
每天一剂Rails良药之open_id_authentication
OpenID 是由LiveJournal和SixApart开发的一套身份验证系统。与目前流行的网站帐号系统(Passport)相比,OpenID具有开放性以及 分散式的特点。 它不基于某一应用网站的注册程序,而且不限制于单一网站的登录使用。OpenID帐号可以在任何OpenID应用网站使用,从而避免了多次 注册、填写 身份资料的繁琐过程。简单言之,OpenID就是一套以用户为中心的分散式身份验证系统 ...
每天一剂Rails良药之localization
在每天一剂Rails良药之Adding Support for Localization里我们讲到了globalize插件 今天来看另一个提供本地化功能的插件localization,localization的特性: 1,支持任何数量的languages和locales 2,定义singluar/plural翻译的简单方法 3,使用lambdas来提供基于Ruby代码的动态翻译 4,定制应用程序的不 ...
每天一剂Rails良药之simply_helpful
simply_helpful插件为我们添加了许多helper方法,例如: 1,render partial 以前我们这样写: <table> <tr><th>Name</th><th>City</th><th>Postcode</th></tr> <%= render :partial ...
Rails Cache
今天插一脚,介绍一下Rails的缓存机制以及memcached的使用 Rails的Cache分四种: 1,Page Cache - Fastest 2,Action Cache - Next Fastest 3,Fragment Cache - Least Fastest 4,ActiveRecord Cache - Only available in Edge Rails 下面一一介绍上面四种Ca ...
每天一剂Rails良药之resource_feeder
acts_as_taggable/brower_filters/resource_feeder/simply_helpful这四个插件放在legacy包下面,因为它们已经停止更新和维护 我们安装时可以用 ruby script/plugin install legacy 这将同时安装这四个插件 或者使用 ruby script/plugin install http://dev.rubyonr ...
每天一剂Rails良药之browser_filters
Rails的acts_as_taggable插件在前面每天一剂Rails良药之Tagging一文中已经讲到 今天来看看browser_filters插件,它是三个常用的过滤器的集合: 1,UnicodeContentType,设置charset为"text/html; charset=utf-8" 2,SafariUnicodeFix,解决Safari浏览器的Ajax调用的uni ...
每天一剂Rails良药之javascript_test
今天来看看javascript_test这个Rails plugin,它是对script.aculo.us库的单元测试框架的Rails风格测试封装 下载安装后,我们可以使用ruby script/generate javascript_test foo来对public/javascripts/foo.js生成测试用的html文件 在测试用的html文件里我们可以写对JavaScript的测试,语法见 ...
每天一剂Rails良药之http_authentication
今天我们来看看Rails的HTTP Basic认证插件http_authentication 安装该插件后我们写一个TestController来看看效果: class TestController < ApplicationController USER_NAME, PASSWORD = "dhh", "secret" before_filter : ...
每天一剂Rails良药之exception_notification
每天一剂Rails良药之Getting Notified of Unhandled Exceptions中也提到了Exception Notification插件 该插件在production环境下,当程序出错时会给recipient发送notification邮件 Exception notification只会在访问的IP地址不为local时才工作,我们可以配置认为是local的IP: co ...
每天一剂Rails良药之continuous_builder和deadlock_retry
continuous_builder是一个Rails与Subversion集成的持续集成工具,参考http://hideto.iteye.com/blog/80873 deadlock_retry允许数据库驱动重试死锁的事务,它已经自动集成到ActiveRecord,我们不用更改任何代码就拥有该插件的重试事务的功能
每天一剂Rails良药之atom_feed_helper
前面的一篇文章每天一剂Rails良药之Syndicate Your Site With RSS中我们看了怎样手动创建RSS 今天我们来看看Rails开发组提供的一个atom_feed_helper插件,它使得创建atom feeds更容易 首先安装atom_feed_helper插件 ruby script/plugin install atom_feed_helper 我们来看看源码,首先 ...
每天一剂Rails良药之account_location
《Rails Recipes》已经告一段落,今天开始一起学习Rails插件 首先安装我们今天要看的account_location插件: ruby script/plugin install account_location account_location很简单,就是几个helper方法,我们先看看源码: # Copyright (c) 2005 David Heinemeier Hanss ...