Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

rails respond_to format.js API

I am an experienced JAVA and C++ developer and I am trying to understand how rails works.

I got this code below:

respond_to do |format|       if @line_item.save         format.html { redirect_to store_url }         format.js { render :json => @line_item, :mime_type => Mime::Type.lookup('application/json'),                  :callback => 'javascriptFunction' } 

and I've been searching the api that defines what I can pass inside the format.js {} but I could not find..

first of all: what kind of statement is format.js, is that a variable?

and most important: what attributes can I pass into format.js {} ? can you pass the direct link? I've searched over the http://api.rubyonrails.org/

like image 958
thiagoh Avatar asked Nov 24 '12 20:11

thiagoh


Video Answer


1 Answers

respond_to do |format|   format.js # actually means: if the client ask for js -> return file.js end 

js here specifies a mime-type that the controller method would send back as a response;
Default Rails mime-types.
If you try also with format.yaml:

respond_to do |format|   format.js   format.yaml end 

that will mean that your controller will return yml or js depending on what the client-side is asking;

{} in terms of ruby is a block; If you don't specify any rails will try to render a default file from app/views/[contoller name]/[controller method name].[html/js/...]

# app/controllers/some_controller.rb def hello   respond_to do |format|     format.js   end end 

will look for /app/views/some/hello.js.erb; // at least in Rails v. 2.3.

If you do specify block:

respond_to do |format|     # that will mean to send a javascript code to client-side;     format.js { render                      # raw javascript to be executed on client-side         "alert('Hello Rails');",          # send HTTP response code on header         :status => 404, # page not found         # load /app/views/your-controller/different_action.js.erb         :action => "different_action",         # send json file with @line_item variable as json         :json => @line_item,         :file => filename,         :text => "OK",         # the :location option to set the HTTP Location header         :location => path_to_controller_method_url(argument)       }    end 
like image 103
ted Avatar answered Sep 25 '22 01:09

ted