每天一剂Rails良药之Handling Bounced Email
当Email发送失败时,我们可以捕获bounced messages来notify系统用户邮件发送出错 app/models/reminder.rb class Reminder < ActionMailer::Base def reminder(recipient, text) @subject = 'Automated Reminder!' @body = {:text => te ...
每天一剂Rails良药之Sending Email With Attachments
今天来看看使用Rails发送带附件的邮件 Controller app/controllers/spam_controller.rb: class SpamController < ApplicationController def spam Spammer.deliver_spam_with_attachment(params[:name], params[:email], params[ ...
每天一剂Rails良药之Testing Incoming Email
今天来看看Rails对接收Email的测试,首先ruby script/generate mailer Receiver,Rails会自动为我们生成test/unit/receiver_test_pristine.rb: require File.dirname(__FILE__) + '/../test_helper' require 'receiver' class ReceiverTest ...
每天一剂Rails良药之Send Gracefully Degrading Rich-Content Emails
针对网页浏览器和手机,我们的Email的content_type分别为"text/html"和"text/plain" 我们可以这样做ruby script\generate mailer Notifier multipart_alternative app/models/notifier.rb: def multipart_alternative(reci ...
每天一剂Rails良药之Adding Simple Web Serices To Your Actions
1,对于接收WebService,我们完全不用管,因为默认时任何ContentType为"application/xml"的POST都将被Rails内建的XmlSimple解析并转换为参数的Hash,这样我们就始终可以在controller里使用params方法得到参数 2,对于返回WebService,可以这样做 app/controllers/contacts_control ...
每天一剂Rails良药之Easy HTML Whitelists
有时候我们可能要允许用户使用某些HTML标签,但是必须禁止另外一些HTML标签 我们可以在数据库存储用户输入的内容,包括允许的HTML标签,然后显示时过滤一下 让我们来一个helper方法来过滤内容,有两种方式: 1,写在application_helper.rb里 2,写在lib目录里,然后在config/environment.rb里加上require_dependency 'rails_pat ...
每天一剂Rails良药之Validating Non-ActiveRecord Objects
对于非ActiveRecord对象的Validation,我们不能简单的include ActiveRecord::Validations 我们需要写一个module,如ValidatingNonARObjects/lib/validateable.rb module Validateable [:save, :save!, :update_attribute].each{|attr| defin ...
每天一剂Rails良药之Automatically Save a Draft of a Form
今天我们来看看Gmail里的Ajax自动保存草稿在Rails里的实现 首先在layout里引入Javascript标签 [coce] <%= javascript_include_tag :defaults %> posts_controller.rb def new if request.get? @post = session[:post_draft] || Post.new ...
每天一剂Rails良药之The Console Is Your Friend
我们要多使用ruby script/console,在开发Rails程序时最好启动一个console窗口 我们来看看我们可以使用console干什么: Person.find_by_first_name("Chad").email Calendar.column_names app.get "/" app.follow_redirect! 如果Ruby编译 ...
每天一剂Rails良药之Adding Support for Localization
今天来看看Rails对于不同locale的支持,我们使用Globalize插件 ruby script/plugin install \ http://svn.globalize-rails.org/svn/globalize/globalize/trunk 然后我们生成migration文件 ruby script/generate globalize 然后运行 rake db:migr ...
每天一剂Rails良药之Distributing Your Application As One Directory T
我们可以发布包含Rails源代码以及所有plugins的Rails程序,这样我们部署或迁移的时候就不用每次安装一次Rails以及依赖库 rake rails:freeze:gems表示把当前Gems安装的Rails Unpack到vendor/rails rake rails:unfreeze则表示删除vendor/rails 第三方Rails插件我们可以用ruby script\plugin in ...
每天一剂Rails良药之Keeping Track of Who Did What
今天我们看看怎样在数据库记录用户操作 db/migrate/002_add_audit_trails_table.rb class AddAuditTrailsTable < ActiveRecord::Migration def self.up create_table :audit_trails do |t| t.column :record_id, :integer t.column ...
每天一剂Rails良药之Easily Group Lists of Things
今天看看两个很好用的方法 1,Enumerable#group_by(): <% employees = Employee.find(:all).group_by{|employee| employee.title } %> <% employees.each do |title, people| %> <h2><%= title %></h2 ...
每天一剂Rails良药之Processing Uploaded Images
今天来看看Rails怎样做Image的thumbnail 我们需要RMagick,它是ImageMagick/GraphicsMagick的Ruby API 我们先安装好ImageMagic/GraphicsMagick,然后安装RMagick: sudo gem install rmagick 上传表单: <% form_fo :image, @image, url=> {:ac ...
每天一剂Rails良药之Generate Documentation For Your Application
1,查看安装的gems gem_server 或者gem_server -p 2600来指定端口,默认是8808 然后访问http://localhost:8808即可看到本机安装的gems的文档 如果Rails是使用RubyGems安装的,也可以用这种方式看到 2,生成Rails文档 rake doc:rails 如果Rails是使用rake rails:freeze:edge安装的,可 ...
每天一剂Rails良药之Sharing Models Between Your Applications
如果有一些Model是可以在几个Rails程序间共享的,我们有几种方式来共享它们 1,符号链接 将Rails程序的app/models符号链接到....../shared_models 2,svn svn propset svn:externals "models http://railsrecipes.com/svn/shared_models" . 3,插件 这是最好 ...
每天一剂Rails良药之Quickly Inspect Your Sessions’Contents
session数据保存在Rails程序根目录下的tmp/sessions目录 Rails的sessions默认以Marshal Ruby对象保存 有时候程序由于session数据不对而出错,我们可以写一段脚本来检查session数据: DumpingSessionContentsDuringDevelopment/script/dump_sessions #!/usr/bin/env ruby r ...
每天一剂Rails良药之Secret URLs
有时候我们没法做用户认证,比如一个用户的收件箱的RSS feed或者一个激活注册用户的链接 我们可以通过一个access_key来做访问控制 class Inbox < ActiveRecord::Base has_many :messages before_create :generate_access_key def generate_access_key @attributes['ac ...
每天一剂Rails良药之Making Your Own Rails Plugins
今天来看看怎样写Rails插件 首先我们生成插件框架: ruby script\generate plugin active_record_search 我们生成了一个名为active_record_search的插件,我们希望给每个Model添加一个search方法,用来在多个fields中search某一string vendor/plugins/active_record_search/l ...
每天一剂Rails良药之Syndicate Your Site With RSS
今天来看看Rails对RSS的支持: feed_controller.rb: class FeedController < ApplicationController session \:off def recipes @recipes = Recipe.find(:all, \:order => "updated_at, created_at", :limit = ...
每天一剂Rails良药之Living On The Edge(of Rails Development)
想要使用最新版本的Rails?有多种方式任你选择: 1,svn更新方式 如果你安装了Subversion,在你的Rails project的vendor目录下运行以下命令 svn propset svn:externals \ "rails http://dev.rubyonrails.org/svn/rails/trunk" . 这类似于着你将Rails的开发trunk符 ...
每天一剂Rails良药之Dealing With Time-zones
UTC时间+时区偏移=本地时间 如果我们的系统需要支持全球用户,怎样保证不同时区的用户显示正确的本地时间呢 我们可以让用户选择自己的时区,记录在数据库,然后转换时间后显示 如users表有一个string的timezone字段记录时区 而恰好Rails里有一个TimeZone类,TimeZone.all可以得到所有时区: class User < ActiveRecord::Base com ...
每天一剂Rails良药之Creating Your Own Rake Tasks
Ruby的Rake工具其实是模仿的Make,我们写一个简单的Rakefile看看: desc "Rake Test" task :main puts "Hello, Rake!" task :default => :main 然后我们在Rakefile当前目录运行rake或rake -f Rakefile即可 其中我们定义了一个main task,并 ...
每天一剂Rails良药之Getting Notified of Unhandled Exceptions
今天看看一个Exception Notificatio插件: ruby script/plugin install exception_notification 然后我们在ApplicationController里添加如下代码: include ExceptionNotifiable 并且在config/environment.rb里配置Email: ExceptionNotifier. ...
每天一剂Rails良药之Continuous Integration
Rails有一个简单的持续集成插件: ruby script/plugin install continuous_builder 不过这个插件是需要Subversion的 然后我们在repository/hooks目录下创建一个post-commit文件: #!/bin/sh DEVELOPERS=chad@chadfowler.com BUILDER="'Continuous Bu ...
每天一剂Rails良药之Automating Development With Your Own Generators
今天看看怎么写自己的Generators Rails在以下地方查找用户自定义的Generators: RAILS_ROOT/lib/generators RAILS_ROOT/vendor/generators RAILS_ROOT/vendor/plugins/any_subdirectory/generators ~/.rails/generators 以及以_generator为后缀的Gems ...
每天一剂Rails良药之Write Tests for Your Helpers
今天我们看看怎么测试我们的helper方法: require File.dirname(__FILE__) + '/../test_helper' class HelperTest < Test::Unit::TestCase include ActionView::Helpers::UrlHelper include ActionView::Helpers::TextHelper incl ...
每天一剂Rails良药之Testing Across Multiple Controllers
Rails测试分三种: 1,关注于一个单独的Model的单元测试Unit test 2,关注于一个单独的Controller和它使用的models之间的交互的功能测试Functional test 3,关注story级的多个controllers的多个actions之间的交互的集成测试Integration test 今天我们就来看看跨越多个controllers的集成测试 IntegrationT ...
每天一剂Rails良药之Extracting Test Fixtures From Live Data
Rails做单元测试时,我们自己手动去创建所有的fixtures会是个噩梦,有没有什么好的方案呢? 我们可以利用数据库里已有的数据,写一个rake tast来把数据库的数据复制出来到YAML文件里: CreateFixturesFromLiveData/lib/tasks/extract_fixtures.rake desc 'Create YAML test fixtures from data ...
每天一剂Rails良药之Creating Dynamic Test Fixtures
Rails的fixture文件在传递给YAML解析之前先用ERB解析,这样一来我们就可以使用Ruby代码动态生成测试数据,而不用一条数据一条数据的写了: <% 1.upto(50) do |number| %> child_post_<%= number %>: id: <%= number + 3 %> title: This is auto-generate ...