Final blog for day 3 (I'll probably end up summarising a lot of this is a presentation to foomongers, so I'll post the slides if I do. However, for now:
We started to look at REST.
Just a few notes- not in any structure. A good resource to read is Roy T. Fielding's dissertation (http://www.ics.uci.edu/~fielding/)
Representational State Transfer
request sequence (slide 198)
by default
link_to => GET
form_for => POST
link_to with movie_path => GET
link_to using edit_movie_path => GET
as browsers don't issue PUT and DELETE requests, rails cheats with:
to get PUT:
form_for with :url => movie_path(@movie) and :html => (:method => "put")
you get => method="post", intput type="hidden" name="_method" value="put"
to get DELETE
link_to wih item_path(@item), :method => "delete"
you get => DELETE (but wrapped in a form so that spiders don't follow it)
REST and CRUD have no actual real connection, but when brought into rails, then they meet up,
because it has been orchestrated
And then finally during the day onto some Ajax stuff
Ajax:
Ajax request happens overall with in the cycle of a request
link_to_remote "Click me", :url => {....}
-> goes to server, does stuff C/A -> sends back to client
typically, not a whole cycle, as only sends back a snippet/fragment which you want to drop into your document
link_to_remote "Click me", :url => {:action => click_me}, :update => "mydiv"
so drops it into a div entitled mydiv
def click_me
render :partial => "clicked"
end
renders the partial and drops it in
link_to_remote "Click me", :url => {:action => click_me}, :div => "mydiv"
as no update
def click_me
@div = params[:div]
@del = Auction.delete(params[:id])
end
hands off to click_me.rjs
if @del.zero?
page.alert("Destroy operation failed")
else
page.visual_effect :shrink, @div, :duration =>1
page.delay(2) do
page.alert("That auction is history!")
end
end
page sends back the javascript to do what you want
form_remote_for :item, :url => {:action => :update}, :update => "mydiv"
flash is normally waiting for the next request cycle
flash.now[:notice] will have it come through to the ajx response there and then, rather than wait for the page refresh
raise request.xhr? method which means is this an ajax request, which means that you can fork on the request.
name.html.erb will take preference over name.rjs, so you either shouldn't have them with the same name,
or render rjs directly in the controller
render :update do |page|
page.alert("Hello")
end
which would bypass that issue
you can put rjs directly in the view to get javascript directly in the page
xhr requests are post by default, so if you are requesting a view only allowed by get, put or delete, then you need to explicity state this in the link_to_remote tag
Subscribe to:
Post Comments (Atom)
1 comment:
Wiked. Almost the same as being there. Felt bad having to leave during Ajax stuff. Hope this workshop things is worth it.
What your company slogan?
Vampire Software - We suck our clients dry! ;)
Post a Comment