SlideShare a Scribd company logo
rails-bestpractices.com www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
为什么需要 Rails Best Practices? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
遵循 Rails Best Practices 写出更漂亮的 Rails 代码 成为更优秀的 Rails 程序员 得到更好的回报 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
提供一个分享最佳实践的地方 提供一个获取最佳实践的地方 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
rails best practices 的故事 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
很久很久以前。。。 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
2009 年 10 月 24 日  上海 ihower 发表演讲 “ Rails Best Practices” http://www.slideshare.net/ihower/rails-best-practices www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
2009 年 11 月 03 日 rails_best_practices 项目启动 http://github.com/flyerhzm/rails_best_practices www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
rails_best_practices 项目 根据 ihower 的演讲对 rails 代码进行静态分析,找出 bad smell www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
2010 年 06 月 19 日 metric_fu 项目集成 rails_best_practices http://metric-fu.rubyforge.org www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
2010 年 07 月 04 日 rails-bestpracitces.com 项目启动 http://rails-bestpractices.com www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
rails-bestpractices 从何开始? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Rails Template 创建 rails 应用的模板 扩展 rails 应用的模板 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   run “echo TOD > README” gem “haml”, “>= 3.0.13” plugin  “typus”, :git => “git://github.com/fesplugas/typus.git” generate “model User login:string email:string” route “root :to => 'home#show'” rake “db:migrate” git :add => “.”
Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Demo http://github.com/flyerhzm/rails3-template
我碰到的 Rails3 变动 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   Generators Routes ActiveRecord 接口 Rspec2
Rails3 Route www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   resources :posts do get :archive, :on => :collection resources :comments, :only => :create resources :votes, :only => [:create, :destroy] resource :implementation end match 'search' => 'search#show', :as => :search match 'page/:name' => 'pages#show', :as => :page root :to => "posts#index"
Rails3 Route www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   /tags/rails/posts => /tags/rails?nav=posts /tags/rails/posts?page=2 => /tags/rails?nav=posts&page=2 /tags/rails/posts?action=show&controller=tags&nav=posts&page=2 => /tags/rails?nav=posts&page=2 match "/tags/:id/posts" => redirect { |params, req| if req.query_string.index('page') # query_string remove controller and action "/tags/#{params[:id]}?#{query_string}" else "/tags/#{params[:id]}?nav=posts" end }
Rails3 Scope www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   scope :implemented, where(:implemented => true) default_scope order('created_at desc') with_exclusive_scope do scope :most_voted, order('vote_points desc') end
介绍一些非常实用的插件 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Haml www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   一种 非常简洁的模板语言,是 ERB 的替代品 http://github.com/nex3/haml
Haml  (Before) www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   <div id=&quot;profile&quot;> <div class=&quot;left column&quot;> <div id=&quot;date&quot;><%= print_date %></div> </div> <div class=&quot;right column&quot;> <div id=&quot;email&quot;><%= current_user.email %></div> <div id=&quot;bio&quot;><%= h current_user.bio %></div> </div> </div>
Haml  (After) www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   #profile .left.column #date= print_date #address= current_user.address .right.column #email= current_user.email #bio= h(current_user.bio)
Compass www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   一种 css 框架 使得 css 更易于创建和书写 http://github.com/chriseppstein/compass
Compass www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   reset layout  (blueprint …) css3  (border radius, text shadow, gradient …) utilities  (clearfix, float, horizontal list …)
Compass  代码重用 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   @mixin wikistyle { margin: 1em 0; h1 { font-size: 170%; } h2 { font-size: 150%; } … }
Compass  代码重用 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   @import ‘wikistyle’ .post .wikistyle { @include wikistyle; margin-top: 10px; } .question .wikistyle { @include wikistyle; margin-top: 5px; }
Formtastic www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   简化 form 表单的创建 http://github.com/justinfrench/formtastic
Formtastic www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   = semantic_form_for @user do |form| = form.inputs do = form.input :login, :label => 'Username' = form.input :email = form.input :password = form.input :password_confirmation = form.buttons do = form.submit &quot;Register&quot;
Inherited_resources www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   加速 controller 的开发 http://github.com/josevalim/inherited_resources
Inherited_resources www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   class AnswersController < InheritedResources::Base before_filter :require_user, :only => [:new, :edit, :create, :update] belongs_to :question create! do |success, failure| success.html { redirect_to question_path(@question) } failure.html { render 'questions/show' } end update! do |success, failure| success.html { redirect_to question_path(@question) } end end
Authlogic  authlogic-connect www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   注册、登录 使用 facebook 、 twitter 帐号登录 使用 OpenID 帐号登录
Exception_notification www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   邮件通知服务器上的错误 非常重要,必不可少! http://github.com/rails/exception_notification
简单的优化工作 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
前端优化 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   把所有的 stylesheets 组合为一个 all.css 把所有的 javsacripts 组合为一个 all.js 把所有的图片组合为一个 css_sprite.png
组合 css www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   = stylesheet_link_tag 'compiled/screen', 'compiled/layout', 'compiled/post', :cache => true
组合 javascript www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   = javascript_include_tag 'jquery', 'rails', 'application', :cache => true
Css_sprite www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   自动处理 css sprite 约定: images/css_sprite 目录下的图片组合成 css sprite 图片 生成 css_sprite.png 和 css_sprite.css (css, sass, scss) http://github.com/flyerhzm/css_sprite
Css sprite www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   twitter_icon.png .twitter_icon hotmail-logo.png hotmail-logo icons/twitter_icon.png .icons .twitter_icon widget/icons/twitter_icon.png .widget .icons .twitter_icon twitter_icon_hover.png .twitter_icon:hover twitter-icon-hover.png .twitter-icon:hover logos_hover/gmail_logo.png .logos:hover .gmail_logo logos-hover/gmail-logo.png .logos:hover .gmail-logo .gmail-logo-active.png .gmail-logo.active logos-active/gmail-logo.png .logos.active .gmail-logo
SQL 查询优化 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   找出所有没有索引的数据表外键 http://github.com/eladmeidar/rails_indexes
N+1 查询 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   找出 N+1 的查询以及多余的 eager loading http://github.com/flyerhzm/bullet
N+1 查询 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   动态提示:  (alert, console.log, logger, growl, xmpp) N+1 Query detected Post => [:user] Add to your finder: :include => [:user] N+1 Query method call stack
测试 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   ngty  测试代码主要贡献者
remarkable_activerecord www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   has_one :implementation, :dependent => :destroy has_many :posts, :dependent => :destroy validates_presence_of :title, :body validates_uniqueness_of :title
remarkable_activerecord www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   should_have_one :implementation, :dependent => :destroy should_have_many :posts, :dependent => :destroy should_validate_presence_of :title, :body should_validate_uniqueness_of :title
Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   class Post < ActiveRecord::Base belongs_to user, :counter_cache => true def belongs_to?(user) self.user == user end end
Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   module UserOwnable def self.included(base) base.class_eval do belongs_to :user, :counter_cache => true end end def belongs_to?(user) self.user == user end end class Post < ActiveRecord::Base include UserOwnable end
Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development   describe Post do include RailsBestPractices::Macros should_be_user_ownable end module RailsBestPractices::Macros def should_be_user_ownable describe 'being user ownable' do should_belong_to :user, :counter_cache => true it 'should belong to someone if he is the owner of it' it 'should not belong to someone if he is not the owner of it' end end end
分享你的 Rails 最佳实践 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Rails 最佳实践问答 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
rails_best_practices gem demo www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
rails_best_practices 将会在本月底开始支持 rails3 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
Q&A 谢谢 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development

More Related Content

KEY
Rails project code review
PPT
Design Pattern From Java To Ruby
PDF
Yellowpagescom Behind The Curtain
PDF
Migrating from webrat to Capybara
PDF
Migrate PHP E-Commerce Site to Go
PPTX
Hanami in Production @ Hanami User Group SP
PPTX
Why Hanami? @ 1º Hanami Sao Paulo meetup
KEY
Semi Automatic Code Review
Rails project code review
Design Pattern From Java To Ruby
Yellowpagescom Behind The Curtain
Migrating from webrat to Capybara
Migrate PHP E-Commerce Site to Go
Hanami in Production @ Hanami User Group SP
Why Hanami? @ 1º Hanami Sao Paulo meetup
Semi Automatic Code Review

Similar to Rails bestpractices.com (20)

PPT
Static Code Analysis For Ruby
PPT
Contributing To Rails By Plugin Gem
PPT
Css sprite best practices
PPT
Ruby application based on http
PDF
Design Pattern From Java To Ruby
PPT
Email Contacts For Invitation
PPT
Ruby On Rails Seminar Basis Softexpo Feb2010
PDF
Ror Seminar With agilebd.org on 23 Jan09
PDF
Vivendo No Mundo Rails
PDF
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
KEY
Ruby On Rails
PPTX
Intro to Rails
PDF
Rails for Django developers
PDF
Railswaycon 2009 - Summary
PDF
Ruby on Rails best resources for self
PPT
Ruby Kaigi09 China Rubyupdate20090718
PPT
How to Select the Right AI Tech Stack for Web Development.ppt
PPT
1st Chinaonrails Open Course 初试牛刀
PPT
Rails Vs CakePHP
PDF
Introduction to Web Development with Ruby on Rails
Static Code Analysis For Ruby
Contributing To Rails By Plugin Gem
Css sprite best practices
Ruby application based on http
Design Pattern From Java To Ruby
Email Contacts For Invitation
Ruby On Rails Seminar Basis Softexpo Feb2010
Ror Seminar With agilebd.org on 23 Jan09
Vivendo No Mundo Rails
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Ruby On Rails
Intro to Rails
Rails for Django developers
Railswaycon 2009 - Summary
Ruby on Rails best resources for self
Ruby Kaigi09 China Rubyupdate20090718
How to Select the Right AI Tech Stack for Web Development.ppt
1st Chinaonrails Open Course 初试牛刀
Rails Vs CakePHP
Introduction to Web Development with Ruby on Rails
Ad

Recently uploaded (20)

PDF
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Chapter 3 Spatial Domain Image Processing.pdf
PDF
Unlocking AI with Model Context Protocol (MCP)
PDF
Dropbox Q2 2025 Financial Results & Investor Presentation
PDF
Encapsulation theory and applications.pdf
PDF
KodekX | Application Modernization Development
PDF
cuic standard and advanced reporting.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PPTX
Programs and apps: productivity, graphics, security and other tools
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PPTX
Spectroscopy.pptx food analysis technology
PPTX
Understanding_Digital_Forensics_Presentation.pptx
PPTX
sap open course for s4hana steps from ECC to s4
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
PDF
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
PDF
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
DOCX
The AUB Centre for AI in Media Proposal.docx
PDF
Machine learning based COVID-19 study performance prediction
7 ChatGPT Prompts to Help You Define Your Ideal Customer Profile.pdf
Reach Out and Touch Someone: Haptics and Empathic Computing
Digital-Transformation-Roadmap-for-Companies.pptx
Chapter 3 Spatial Domain Image Processing.pdf
Unlocking AI with Model Context Protocol (MCP)
Dropbox Q2 2025 Financial Results & Investor Presentation
Encapsulation theory and applications.pdf
KodekX | Application Modernization Development
cuic standard and advanced reporting.pdf
Spectral efficient network and resource selection model in 5G networks
Programs and apps: productivity, graphics, security and other tools
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Spectroscopy.pptx food analysis technology
Understanding_Digital_Forensics_Presentation.pptx
sap open course for s4hana steps from ECC to s4
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
How UI/UX Design Impacts User Retention in Mobile Apps.pdf
Optimiser vos workloads AI/ML sur Amazon EC2 et AWS Graviton
The AUB Centre for AI in Media Proposal.docx
Machine learning based COVID-19 study performance prediction
Ad

Rails bestpractices.com

  • 1. rails-bestpractices.com www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 2. 为什么需要 Rails Best Practices? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 3. 遵循 Rails Best Practices 写出更漂亮的 Rails 代码 成为更优秀的 Rails 程序员 得到更好的回报 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 4. 提供一个分享最佳实践的地方 提供一个获取最佳实践的地方 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 5. rails best practices 的故事 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 6. 很久很久以前。。。 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 7. 2009 年 10 月 24 日 上海 ihower 发表演讲 “ Rails Best Practices” http://www.slideshare.net/ihower/rails-best-practices www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 8. 2009 年 11 月 03 日 rails_best_practices 项目启动 http://github.com/flyerhzm/rails_best_practices www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 9. rails_best_practices 项目 根据 ihower 的演讲对 rails 代码进行静态分析,找出 bad smell www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 10. 2010 年 06 月 19 日 metric_fu 项目集成 rails_best_practices http://metric-fu.rubyforge.org www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 11. 2010 年 07 月 04 日 rails-bestpracitces.com 项目启动 http://rails-bestpractices.com www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 12. rails-bestpractices 从何开始? www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 13. Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 14. Rails Template 创建 rails 应用的模板 扩展 rails 应用的模板 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 15. Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development run “echo TOD > README” gem “haml”, “>= 3.0.13” plugin “typus”, :git => “git://github.com/fesplugas/typus.git” generate “model User login:string email:string” route “root :to => 'home#show'” rake “db:migrate” git :add => “.”
  • 16. Rails Template www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Demo http://github.com/flyerhzm/rails3-template
  • 17. 我碰到的 Rails3 变动 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development Generators Routes ActiveRecord 接口 Rspec2
  • 18. Rails3 Route www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development resources :posts do get :archive, :on => :collection resources :comments, :only => :create resources :votes, :only => [:create, :destroy] resource :implementation end match 'search' => 'search#show', :as => :search match 'page/:name' => 'pages#show', :as => :page root :to => &quot;posts#index&quot;
  • 19. Rails3 Route www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development /tags/rails/posts => /tags/rails?nav=posts /tags/rails/posts?page=2 => /tags/rails?nav=posts&page=2 /tags/rails/posts?action=show&controller=tags&nav=posts&page=2 => /tags/rails?nav=posts&page=2 match &quot;/tags/:id/posts&quot; => redirect { |params, req| if req.query_string.index('page') # query_string remove controller and action &quot;/tags/#{params[:id]}?#{query_string}&quot; else &quot;/tags/#{params[:id]}?nav=posts&quot; end }
  • 20. Rails3 Scope www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development scope :implemented, where(:implemented => true) default_scope order('created_at desc') with_exclusive_scope do scope :most_voted, order('vote_points desc') end
  • 21. 介绍一些非常实用的插件 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 22. Haml www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 一种 非常简洁的模板语言,是 ERB 的替代品 http://github.com/nex3/haml
  • 23. Haml (Before) www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development <div id=&quot;profile&quot;> <div class=&quot;left column&quot;> <div id=&quot;date&quot;><%= print_date %></div> </div> <div class=&quot;right column&quot;> <div id=&quot;email&quot;><%= current_user.email %></div> <div id=&quot;bio&quot;><%= h current_user.bio %></div> </div> </div>
  • 24. Haml (After) www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development #profile .left.column #date= print_date #address= current_user.address .right.column #email= current_user.email #bio= h(current_user.bio)
  • 25. Compass www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 一种 css 框架 使得 css 更易于创建和书写 http://github.com/chriseppstein/compass
  • 26. Compass www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development reset layout (blueprint …) css3 (border radius, text shadow, gradient …) utilities (clearfix, float, horizontal list …)
  • 27. Compass 代码重用 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development @mixin wikistyle { margin: 1em 0; h1 { font-size: 170%; } h2 { font-size: 150%; } … }
  • 28. Compass 代码重用 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development @import ‘wikistyle’ .post .wikistyle { @include wikistyle; margin-top: 10px; } .question .wikistyle { @include wikistyle; margin-top: 5px; }
  • 29. Formtastic www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 简化 form 表单的创建 http://github.com/justinfrench/formtastic
  • 30. Formtastic www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development = semantic_form_for @user do |form| = form.inputs do = form.input :login, :label => 'Username' = form.input :email = form.input :password = form.input :password_confirmation = form.buttons do = form.submit &quot;Register&quot;
  • 31. Inherited_resources www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 加速 controller 的开发 http://github.com/josevalim/inherited_resources
  • 32. Inherited_resources www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development class AnswersController < InheritedResources::Base before_filter :require_user, :only => [:new, :edit, :create, :update] belongs_to :question create! do |success, failure| success.html { redirect_to question_path(@question) } failure.html { render 'questions/show' } end update! do |success, failure| success.html { redirect_to question_path(@question) } end end
  • 33. Authlogic authlogic-connect www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 注册、登录 使用 facebook 、 twitter 帐号登录 使用 OpenID 帐号登录
  • 34. Exception_notification www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 邮件通知服务器上的错误 非常重要,必不可少! http://github.com/rails/exception_notification
  • 35. 简单的优化工作 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 36. 前端优化 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 把所有的 stylesheets 组合为一个 all.css 把所有的 javsacripts 组合为一个 all.js 把所有的图片组合为一个 css_sprite.png
  • 37. 组合 css www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development = stylesheet_link_tag 'compiled/screen', 'compiled/layout', 'compiled/post', :cache => true
  • 38. 组合 javascript www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development = javascript_include_tag 'jquery', 'rails', 'application', :cache => true
  • 39. Css_sprite www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 自动处理 css sprite 约定: images/css_sprite 目录下的图片组合成 css sprite 图片 生成 css_sprite.png 和 css_sprite.css (css, sass, scss) http://github.com/flyerhzm/css_sprite
  • 40. Css sprite www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development twitter_icon.png .twitter_icon hotmail-logo.png hotmail-logo icons/twitter_icon.png .icons .twitter_icon widget/icons/twitter_icon.png .widget .icons .twitter_icon twitter_icon_hover.png .twitter_icon:hover twitter-icon-hover.png .twitter-icon:hover logos_hover/gmail_logo.png .logos:hover .gmail_logo logos-hover/gmail-logo.png .logos:hover .gmail-logo .gmail-logo-active.png .gmail-logo.active logos-active/gmail-logo.png .logos.active .gmail-logo
  • 41. SQL 查询优化 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 找出所有没有索引的数据表外键 http://github.com/eladmeidar/rails_indexes
  • 42. N+1 查询 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 找出 N+1 的查询以及多余的 eager loading http://github.com/flyerhzm/bullet
  • 43. N+1 查询 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development 动态提示: (alert, console.log, logger, growl, xmpp) N+1 Query detected Post => [:user] Add to your finder: :include => [:user] N+1 Query method call stack
  • 44. 测试 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development ngty 测试代码主要贡献者
  • 45. remarkable_activerecord www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development has_one :implementation, :dependent => :destroy has_many :posts, :dependent => :destroy validates_presence_of :title, :body validates_uniqueness_of :title
  • 46. remarkable_activerecord www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development should_have_one :implementation, :dependent => :destroy should_have_many :posts, :dependent => :destroy should_validate_presence_of :title, :body should_validate_uniqueness_of :title
  • 47. Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development class Post < ActiveRecord::Base belongs_to user, :counter_cache => true def belongs_to?(user) self.user == user end end
  • 48. Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development module UserOwnable def self.included(base) base.class_eval do belongs_to :user, :counter_cache => true end end def belongs_to?(user) self.user == user end end class Post < ActiveRecord::Base include UserOwnable end
  • 49. Module, module, module www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development describe Post do include RailsBestPractices::Macros should_be_user_ownable end module RailsBestPractices::Macros def should_be_user_ownable describe 'being user ownable' do should_belong_to :user, :counter_cache => true it 'should belong to someone if he is the owner of it' it 'should not belong to someone if he is not the owner of it' end end end
  • 50. 分享你的 Rails 最佳实践 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 51. Rails 最佳实践问答 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 52. rails_best_practices gem demo www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 53. rails_best_practices 将会在本月底开始支持 rails3 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development
  • 54. Q&A 谢谢 www.ekohe.com Web Development & Graphic Design China Ruby on Rails Development - Rails Consulting - Rails Services - Merb - Offshore Web Development