Applied  Ruby on Rails & AJAX An insight into the technology and principles behind a social networking community
Who am I? <ul><li>Farhan Mashraqi (Frank Mash) </li></ul><ul><li>Developer for 7+ years </li></ul><ul><li>MySQL DBA </li><...
What we’ll cover (aka the essentials) <ul><li>Why ROR? </li></ul><ul><li>MVC </li></ul><ul><li>Crash Course (Scaffolding e...
The essentials continued <ul><li>Transactions </li></ul><ul><li>Blog Claims </li></ul><ul><li>Tagging </li></ul><ul><li>In...
Why would I use Ruby On Rails? <ul><li>RAD </li></ul><ul><li>DRY: “Do not Repeat Yourself” </li></ul><ul><li>Disciplined <...
MVC
Crash Course [root@srv31 docs]# rails ror create create  app/controllers create  app/helpers create  app/models create  ap...
Do it with Scaffolding [root@srv31 ror]# ruby script/generate scaffold user exists  app/controllers/ exists  app/helpers/ ...
Experience the magic http://localhost:3000/users http://localhost:3000/users/new
Find functions <ul><li>find_by_[field_name] (field_value) </li></ul><ul><li>find_by_[field_name]_and_[field_name] </li></u...
URLs in ROR <%= link_to “Reply”, :controller=>”posts”, :action=>“reply”, :id=>4  %>
What is Adoppt <ul><li>A replicatable social networking platform </li></ul><ul><li>Create and participate in communities <...
 
 
Ajaxifying the login  form <ul><li>Ajaxified version </li></ul><%=  link_to  “Login”, :controller=>”member”, :action=>”log...
 
Relationships / Validations <ul><li>A community </li></ul><ul><ul><li>Has many members subscribed </li></ul></ul><ul><ul><...
HABTM using Subscriptions class  Member has_many :subscriptions end  class  Portal has_many :subscriptions end class  Subs...
Self referential relationships <ul><li>A member has many friends (member) </li></ul><ul><li>Self referential HABTM relatio...
Using relationships <ul><li>1. Which favorites were posted to a portal </li></ul>@portal = Portal.new @favorites = @portal...
Transactions (InnoDB) Member.transaction(@member, @friend) do @member.friends << @friend unless  @member.friends.include?(...
Blog Claims def claim_verify @wb= Weblog.find_by_url(@params[:url]) require 'open-uri‘ @found =  open(@wb.url).read.includ...
Tagging <ul><li>acts_as_taggable gem  (http://taggable.rubyforge.org/)   </li></ul>
Tagging class  Article  < ActiveRecord::Base acts_as_taggable  :join_class_name => ' TagArticle ‘ class  TagArticle belong...
In place editing class BlogsController < ApplicationController  in_place_edit_for  :weblog, :description <%=  in_place_edi...
Recap <ul><li>ROR: Valuable to You </li></ul>
Where to learn more <ul><li>Books </li></ul><ul><ul><li>Agile Web Development with Rails by Dave Thomas and David Heinemei...
Q&A
Upcoming SlideShare
Loading in...5
×

mashraqi_farhan

556

Published on

Published in: Business, Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
556
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
12
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • Transcript of "mashraqi_farhan"

    1. 1. Applied Ruby on Rails & AJAX An insight into the technology and principles behind a social networking community
    2. 2. Who am I? <ul><li>Farhan Mashraqi (Frank Mash) </li></ul><ul><li>Developer for 7+ years </li></ul><ul><li>MySQL DBA </li></ul><ul><li>Community Member </li></ul><ul><li>A Recovering PHP Developer </li></ul><ul><li>Contact Information: </li></ul><ul><li>Business E-mail: [email_address] </li></ul><ul><li>Personal E-mail: [email_address] </li></ul><ul><li>Personal Blog http://mashraqi.com </li></ul>
    3. 3. What we’ll cover (aka the essentials) <ul><li>Why ROR? </li></ul><ul><li>MVC </li></ul><ul><li>Crash Course (Scaffolding etc) </li></ul><ul><li>URLs in ROR </li></ul><ul><li>Adoppt </li></ul><ul><li>AJAXifying Forms </li></ul><ul><li>Relationships / Validations </li></ul>
    4. 4. The essentials continued <ul><li>Transactions </li></ul><ul><li>Blog Claims </li></ul><ul><li>Tagging </li></ul><ul><li>In place editing </li></ul><ul><li>Learn more </li></ul><ul><li>Q&A </li></ul>
    5. 5. Why would I use Ruby On Rails? <ul><li>RAD </li></ul><ul><li>DRY: “Do not Repeat Yourself” </li></ul><ul><li>Disciplined </li></ul><ul><li>Normalization </li></ul><ul><li>Relationships </li></ul><ul><li>Web Services </li></ul><ul><li>Everything is an Object </li></ul>
    6. 6. MVC
    7. 7. Crash Course [root@srv31 docs]# rails ror create create app/controllers create app/helpers create app/models create app/views/layouts create config/environments create components create db create doc create lib create lib/tasks create log create public/images ... Creating a bare application on Rails [root@srv31 docs]# rails ror
    8. 8. Do it with Scaffolding [root@srv31 ror]# ruby script/generate scaffold user exists app/controllers/ exists app/helpers/ create app/views/users exists test/functional/ dependency model exists app/models/ exists test/unit/ exists test/fixtures/ create app/models/user.rb ruby script/generate scaffold user CRUD = ‘C’reate, ‘R’ead, ‘U’pdate, ‘D’elete
    9. 9. Experience the magic http://localhost:3000/users http://localhost:3000/users/new
    10. 10. Find functions <ul><li>find_by_[field_name] (field_value) </li></ul><ul><li>find_by_[field_name]_and_[field_name] </li></ul><ul><li>find_first </li></ul><ul><li>find_all_by </li></ul><ul><li>find() </li></ul><ul><li>find_by_sql(‘SELECT ….’) </li></ul>
    11. 11. URLs in ROR <%= link_to “Reply”, :controller=>”posts”, :action=>“reply”, :id=>4 %>
    12. 12. What is Adoppt <ul><li>A replicatable social networking platform </li></ul><ul><li>Create and participate in communities </li></ul><ul><li>Blogs, Forums, Favorites and more </li></ul>
    13. 15. Ajaxifying the login form <ul><li>Ajaxified version </li></ul><%= link_to “Login”, :controller=>”member”, :action=>”login” %> Typical form in ROR <%= link_to_remote “Login”, :url=>{ :controller=>”member”, :action=>”login” }, :update => “loginform”, :loading => “Element.toggle($(‘loading’))”, :complete => “Element.toggle($(‘loading’))” %> Same form ‘AJAXified’
    14. 17. Relationships / Validations <ul><li>A community </li></ul><ul><ul><li>Has many members subscribed </li></ul></ul><ul><ul><li>Members can post favorite web sites </li></ul></ul><ul><ul><li>Belongs to a member or system </li></ul></ul>class Portal < ActiveRecord::Base has_many :subscriptions has_many :favorites belongs_to :member validates_presence_of :portal_name validates_presence_of :portal_description validates_presence_of :portal_url validates_uniqueness_of :portal_url … end
    15. 18. HABTM using Subscriptions class Member has_many :subscriptions end class Portal has_many :subscriptions end class Subscription belongs_to :member belongs_to :portal end
    16. 19. Self referential relationships <ul><li>A member has many friends (member) </li></ul><ul><li>Self referential HABTM relationship </li></ul>class Member < ActiveRecord::Base has_and_belongs_to_many :friends, : class_name => &quot;Member&quot;, : join_table => &quot;friends_members&quot;, : association_foreign_key => &quot;friend_id&quot;, : foreign_key => &quot;member_id&quot;, : after_add => :become_friend_with_friend, : after_remove => :end_friendship end
    17. 20. Using relationships <ul><li>1. Which favorites were posted to a portal </li></ul>@portal = Portal.new @favorites = @portal.favorites 2. Which members are subscribed? @portal = Portal.new @members = @portal.subscriptions @member = Member.new @member_portals = @member.portals 3. Which portals a member is subscribed to? 4. Which members are friends of a member? @member = Member.new @friends = @member.friends
    18. 21. Transactions (InnoDB) Member.transaction(@member, @friend) do @member.friends << @friend unless @member.friends.include?(@friend) @friend.friends << @member unless @friend.friends.include?(@member) end
    19. 22. Blog Claims def claim_verify @wb= Weblog.find_by_url(@params[:url]) require 'open-uri‘ @found = open(@wb.url).read.include?(@wb.v_key) end
    20. 23. Tagging <ul><li>acts_as_taggable gem (http://taggable.rubyforge.org/) </li></ul>
    21. 24. Tagging class Article < ActiveRecord::Base acts_as_taggable :join_class_name => ' TagArticle ‘ class TagArticle belongs_to :article, :class_name => ' Article ', :foreign_key => 'article_id‘ @tagged = Article.tags_count(:limit => 10) Tagging an article @article = Article.new @article.tag “mysql conference ror” Tags for an article @tags = @article.tags() Tag Cloud (Tom Fakes)
    22. 25. In place editing class BlogsController < ApplicationController in_place_edit_for :weblog, :description <%= in_place_editor_field :weblog, :description, :value=>'' %> In your views file In your model
    23. 26. Recap <ul><li>ROR: Valuable to You </li></ul>
    24. 27. Where to learn more <ul><li>Books </li></ul><ul><ul><li>Agile Web Development with Rails by Dave Thomas and David Heinemeier Hansson </li></ul></ul><ul><ul><li>Pro Rails by me </li></ul></ul><ul><ul><li>ROR Recipes by Chad Fowler </li></ul></ul><ul><li>Websites </li></ul><ul><ul><li>http://www.ruby-doc.org/ </li></ul></ul><ul><ul><li>http://www.rubygarden.org/ruby/ </li></ul></ul><ul><ul><li>http://www.ruby-lang.org/ </li></ul></ul><ul><ul><li>http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html </li></ul></ul><ul><ul><li>http://script.aculo.us </li></ul></ul><ul><ul><li>http://rubyonrails.adoppt.com/blog/frank </li></ul></ul>
    25. 28. Q&A
    1. A particular slide catching your eye?

      Clipping is a handy way to collect important slides you want to go back to later.

    ×