applied ruby on rails and ajax - conferences - o'reilly media

Post on 16-Apr-2017

717 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Applied Ruby on Rails & AJAX

An insight into the technology and principles behind a social networking

community

Who am I?

• Farhan Mashraqi (Frank Mash)

• Developer for 7+ years• MySQL DBA• Community Member• A Recovering PHP

Developer

Contact Information:• Business E-mail: frank@designerzllc.com• Personal E-mail: softwareengineer99@yahoo.com • Personal Blog http://mashraqi.com

What we’ll cover(aka the essentials)

• Why ROR?• MVC• Crash Course (Scaffolding etc)• URLs in ROR• Adoppt• AJAXifying Forms• Relationships / Validations

The essentials continued

• Transactions• Blog Claims• Tagging• In place editing• Learn more• Q&A

Why would I use Ruby On Rails?

• RAD• DRY: “Do not Repeat

Yourself”• Disciplined• Normalization• Relationships• Web Services• Everything is an Object

MVC

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

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

Experience the magichttp://localhost:3000/users http://localhost:3000/users/new

Find functions

• find_by_[field_name] (field_value)• find_by_[field_name]_and_[field_name]• find_first• find_all_by• find()• find_by_sql(‘SELECT ….’)

URLs in ROR

<%= link_to “Reply”, :controller=>”posts”, :action=>“reply”, :id=>4 %>

What is Adoppt

• A replicatable social networking platform

• Create and participate in communities• Blogs, Forums, Favorites and more

Ajaxifying the login form

Ajaxified version<%= 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’

Relationships / Validations• A community

– Has many members subscribed– Members can post favorite web sites– Belongs to a member or system

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

HABTM using Subscriptionsclass Member

has_many :subscriptions end

class Portalhas_many :subscriptions

end

class Subscription belongs_to :member belongs_to :portal

end

Self referential relationships• A member has many friends (member)• Self referential HABTM relationship

class Member < ActiveRecord::Base has_and_belongs_to_many :friends, :class_name => "Member", :join_table => "friends_members", :association_foreign_key => "friend_id", :foreign_key => "member_id", :after_add => :become_friend_with_friend, :after_remove => :end_friendshipend

Using relationships

@portal = Portal.new@favorites = @portal.favorites

1. Which favorites were posted to a portal

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

Transactions (InnoDB)Member.transaction(@member, @friend) do

@member.friends << @friend unless @member.friends.include?(@friend)

@friend.friends << @member unless @friend.friends.include?(@member)

end

Blog Claimsdef claim_verify @wb= Weblog.find_by_url(@params[:url]) require 'open-uri‘ @found = open(@wb.url).read.include?(@wb.v_key)end

Tagging

• acts_as_taggable gem (http://taggable.rubyforge.org/)

Taggingclass 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)

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

Recap

• ROR: Valuable to You

Where to learn more• Books

– Agile Web Development with Rails by Dave Thomas and David Heinemeier Hansson

– Pro Rails by me– ROR Recipes by Chad Fowler

• Websites– http://www.ruby-doc.org/– http://www.rubygarden.org/ruby/– http://www.ruby-lang.org/– http://www.ruby-doc.org/stdlib/libdoc/rdoc/rdoc/index.html– http://script.aculo.us– http://rubyonrails.adoppt.com/blog/frank

Q&A

top related