Contents 

Ruby on Rails:
Table of Contents
Preface
Zero to Sixty: Introducing Rails
1.1. Rails Strengths
1.2. Putting Rails into Action
1.3. Organization
1.4. The Web Server
1.5. Creating a Controller
1.6. Building a View
1.7. Tying the Controller to the View
1.8. Under the Hood
1.9. What's Next?
Active Record Basics
2.1. Active Record Basics
2.2. Introducing Photo Share
2.3. Schema Migrations
2.4. Basic Active Record Classes
2.5. Attributes
2.6. Complex Classes
2.7. Behavior
2.8. Moving Forward
Active Record Relationships
3.1. belongs_to
3.2. has_many
3.3. has_one
3.4. What You Haven't Seen
3.5. Looking Ahead
Scaffolding
4.1. Using the Scaffold Method
4.2. Replacing Scaffolding
4.3. Generating Scaffolding Code
4.4. Moving Forward
Extending Views
5.1. The Big Picture
5.2. Seeing Real Photos
5.3. View Templates
5.4. Setting the Default Root
5.5. Stylesheets
5.6. Hierarchical Categories
5.7. Styling the Slideshows
Ajax
6.1. How Rails Implements Ajax
6.2. Playing a Slideshow
6.3. Using Drag-and-Drop to Reorder Slides
6.4. Drag and Drop Everything (Almost Everything)
6.5. Filtering by Category
Testing
7.1. Background
7.2. Ruby's Test::Unit
7.3. Testing in Rails
7.4. Wrapping Up
Installing Rails
1.1. Windows
2.1. OS X
3.1. Linux
Quick Reference
5.1. General
5.2. Testing
5.3. RJS (Ruby JavaScript)
5.4. Active Record
5.5. Controllers
5.6. Views
5.7. Ajax
5.8. Configuring Your Application
About the Authors
Colophon
Index
A
B
C
D
E
F
G
H
I
J
L
M
N
O
P
R
S
T
U
V
W
X
Y
Z

Ruby on Rails manual

Prev Page Next Page
Previous Page
Next Page

5.7. Ajax

Be sure to include the JavaScript libraries in the layout:

<%= javascript_include_tag :defaults %>

5.7.1. Linking to Remote Action

<%= link_to_remote "link", :update => 'some_div',
                           :url => { :action => 'show', :id => post.id } %>

<%= link_to_remote "link", :url => { :action => 'create',
                           :update => { :success => 'good_div',
                                        :failure => 'error_div' },
                           :loading => 'Element.show('spinner'),
                           :complete => 'Element.hide('spinner') } %>

5.7.2. Callbacks



:loading

Called when the remote document is being loaded with data by the browser.



:loaded

Called when the browser has finished loading the remote document.



:interactive

Called when the user can interact with the remote document, even though it has not finished loading.



:success

Called when the XMLHttpRequest is completed, and the HTTP status code is in the 2XX range.



:failure

Called when the XMLHttpRequest is completed, and the HTTP status code is not in the 2XX range.



:complete

Called when the XMLHttpRequest is complete (fires after success/failure if they are present).

You can also specify reactions to return codes directly:

link_to_remote word,
    :url => { :action => "action" },
    404 => "alert('Not found...? Wrong URL...?')",
    :failure => "alert('HTTP Error ' + request.status + '!')"

5.7.3. Ajax Forms

You can create a form that will submit via an XMLHttpRequest instead of a POST request. The parameters are passed exactly the same way (so the controller can use the params method to access the parameters). Fallback for non-JavaScript-enabled browsers can be specified by using the :action methods in the :html option:

form_remote_tag :html => { :action => url_for(:controller => 'controller',
                                              :action => 'action'),
                           :method => :post }

5.7.4. Autocompleting Text Field

In the view t\emplate:

<%= text_field_with_auto_complete :model, :attribute %>

In the controller:

auto_complete_for :model, :attribute

5.7.5. Observe Field

<label for="search">Search term:</label>
<%= text_field_tag :search %>
<%= observe_field(:search,
                  :frequency => 0.5,
                  :update => :results,
                  :url => { :action => :search }) %>
<div id="results"></div>

Optionally specify:

:on => :blur    # trigger for event (default :changed or :clicked)
:with => ...    # a JavaScript expression to specify what value is sent
                # defaults to "value"
:with => 'bla'  # "'bla' = value"
:with => 'a=b'  # "a=b"

5.7.6. Observe Form

Same semantics as observe_field.

5.7.7. periodically_call_remote

<%= periodically_call_remote(:update => 'process-list',
                             :url => { :action => :ps },
                             :frequency => 2 ) %>

Learn more: http://api.rubyonrails.com/classes/ActionView/Helpers/JavaScriptHelper.html.


Previous Page
Next Page