SlideShare une entreprise Scribd logo
1  sur  54
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

Contenu connexe

Tendances

Python to go
Python to goPython to go
Python to goWeng Wei
 
Lessons Learned From Cross-Platform at Airbnb + MvRx
Lessons Learned From Cross-Platform at Airbnb + MvRxLessons Learned From Cross-Platform at Airbnb + MvRx
Lessons Learned From Cross-Platform at Airbnb + MvRxGabriel Peal
 
Rails 5 subjective overview
Rails 5 subjective overviewRails 5 subjective overview
Rails 5 subjective overviewJan Berdajs
 

Tendances (6)

Python to go
Python to goPython to go
Python to go
 
Lessons Learned From Cross-Platform at Airbnb + MvRx
Lessons Learned From Cross-Platform at Airbnb + MvRxLessons Learned From Cross-Platform at Airbnb + MvRx
Lessons Learned From Cross-Platform at Airbnb + MvRx
 
Rails 5 subjective overview
Rails 5 subjective overviewRails 5 subjective overview
Rails 5 subjective overview
 
What's new on Rails 5
What's new on Rails 5What's new on Rails 5
What's new on Rails 5
 
Working with Git
Working with GitWorking with Git
Working with Git
 
Upgrading to rails3
Upgrading to rails3Upgrading to rails3
Upgrading to rails3
 

Similaire à Rails bestpractices.com

Static Code Analysis For Ruby
Static Code Analysis For RubyStatic Code Analysis For Ruby
Static Code Analysis For RubyRichard Huang
 
Contributing To Rails By Plugin Gem
Contributing To Rails By Plugin GemContributing To Rails By Plugin Gem
Contributing To Rails By Plugin GemDaniel Lv
 
Css sprite best practices
Css sprite best practicesCss sprite best practices
Css sprite best practicesRichard Huang
 
Ruby application based on http
Ruby application based on httpRuby application based on http
Ruby application based on httpRichard Huang
 
Design Pattern From Java To Ruby
Design Pattern From Java To RubyDesign Pattern From Java To Ruby
Design Pattern From Java To Rubyyelogic
 
Email Contacts For Invitation
Email Contacts For InvitationEmail Contacts For Invitation
Email Contacts For InvitationRichard Huang
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010arif44
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Shaer Hassan
 
Vivendo No Mundo Rails
Vivendo No Mundo RailsVivendo No Mundo Rails
Vivendo No Mundo RailsAlisson Sales
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyFabio Akita
 
Railswaycon 2009 - Summary
Railswaycon 2009 - SummaryRailswaycon 2009 - Summary
Railswaycon 2009 - Summarydaniel.mattes
 
Ruby on Rails best resources for self
Ruby on Rails best resources for selfRuby on Rails best resources for self
Ruby on Rails best resources for selfDurga Prasad Tumu
 
Ruby Kaigi09 China Rubyupdate20090718
Ruby Kaigi09 China Rubyupdate20090718Ruby Kaigi09 China Rubyupdate20090718
Ruby Kaigi09 China Rubyupdate20090718tengu
 
1st Chinaonrails Open Course 初试牛刀
1st Chinaonrails Open Course 初试牛刀1st Chinaonrails Open Course 初试牛刀
1st Chinaonrails Open Course 初试牛刀Jesse Cai
 
Rails Vs CakePHP
Rails Vs CakePHPRails Vs CakePHP
Rails Vs CakePHPGautam Rege
 
Introduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on RailsIntroduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on Railspmatsinopoulos
 
Encontro De Ti - Ruby e Rails
Encontro De Ti - Ruby e RailsEncontro De Ti - Ruby e Rails
Encontro De Ti - Ruby e RailsFabio Akita
 

Similaire à Rails bestpractices.com (20)

Static Code Analysis For Ruby
Static Code Analysis For RubyStatic Code Analysis For Ruby
Static Code Analysis For Ruby
 
Contributing To Rails By Plugin Gem
Contributing To Rails By Plugin GemContributing To Rails By Plugin Gem
Contributing To Rails By Plugin Gem
 
Css sprite best practices
Css sprite best practicesCss sprite best practices
Css sprite best practices
 
Ruby application based on http
Ruby application based on httpRuby application based on http
Ruby application based on http
 
Design Pattern From Java To Ruby
Design Pattern From Java To RubyDesign Pattern From Java To Ruby
Design Pattern From Java To Ruby
 
Email Contacts For Invitation
Email Contacts For InvitationEmail Contacts For Invitation
Email Contacts For Invitation
 
Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010Ruby On Rails Seminar Basis Softexpo Feb2010
Ruby On Rails Seminar Basis Softexpo Feb2010
 
Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09Ror Seminar With agilebd.org on 23 Jan09
Ror Seminar With agilebd.org on 23 Jan09
 
Vivendo No Mundo Rails
Vivendo No Mundo RailsVivendo No Mundo Rails
Vivendo No Mundo Rails
 
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com RubyConsegi 2010 - Dicas de Desenvolvimento Web com Ruby
Consegi 2010 - Dicas de Desenvolvimento Web com Ruby
 
Ruby On Rails
Ruby On RailsRuby On Rails
Ruby On Rails
 
Intro to Rails
Intro to RailsIntro to Rails
Intro to Rails
 
Rails for Django developers
Rails for Django developersRails for Django developers
Rails for Django developers
 
Railswaycon 2009 - Summary
Railswaycon 2009 - SummaryRailswaycon 2009 - Summary
Railswaycon 2009 - Summary
 
Ruby on Rails best resources for self
Ruby on Rails best resources for selfRuby on Rails best resources for self
Ruby on Rails best resources for self
 
Ruby Kaigi09 China Rubyupdate20090718
Ruby Kaigi09 China Rubyupdate20090718Ruby Kaigi09 China Rubyupdate20090718
Ruby Kaigi09 China Rubyupdate20090718
 
1st Chinaonrails Open Course 初试牛刀
1st Chinaonrails Open Course 初试牛刀1st Chinaonrails Open Course 初试牛刀
1st Chinaonrails Open Course 初试牛刀
 
Rails Vs CakePHP
Rails Vs CakePHPRails Vs CakePHP
Rails Vs CakePHP
 
Introduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on RailsIntroduction to Web Development with Ruby on Rails
Introduction to Web Development with Ruby on Rails
 
Encontro De Ti - Ruby e Rails
Encontro De Ti - Ruby e RailsEncontro De Ti - Ruby e Rails
Encontro De Ti - Ruby e Rails
 

Dernier

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilV3cube
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 

Dernier (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of BrazilDeveloping An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 

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