I am trying to access a rails app resource from an API (it sends an Application/XML GET request) and I would like to not have to parse the XML file.
In my resources controller I have the following:
def get_resource
@my_resource = Resources.new
render :xml => @my_resource
end
which produces an xml file as expected. If i replace it with:
render :layout => false
my API reports a "template missing" error. I've also tried the following:
render :xml => @identity, :layout => false
But the page renders anyway. What's the right way to go about this?
A layout defines the surroundings of an HTML page. It's the place to define a common look and feel of your final output. Layout files reside in app/views/layouts. The process involves defining a layout template and then letting the controller know that it exists and to use it.
By default, if you use the :plain option, the text is rendered without using the current layout. If you want Rails to put the text into the current layout, you need to add the layout: true option and use the . text. erb extension for the layout file.
Rendering is the ultimate goal of your Ruby on Rails application. You render a view, usually . html. erb files, which contain a mix of HMTL & Ruby code. A view is what the user sees.
There is an important difference between render and redirect_to: render will tell Rails what view it should use (with the same parameters you may have already sent) but redirect_to sends a new request to the browser.
When you render :xml, it does not use a layout because it doesn't use any template either. By specifying :layout => false, you tell rails to look for a template which does not exist.
Now, if you don't want to parse an xml file, then you have a few alternatives. Either:
render :json => @my_resource
or
render :text => "My resource name is: #{@my_resource.name}" # Whatever you want
It all depends on how you want the result to look, what your API expects to receive. So if you don't find any of this helpful, give an example of how you want the response to look.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With