What's the difference between render and display?

Render

In Merb, the render method renders a template. For instance, consider the following controller:

class Post < Application
  provides :json
 
  def index
    render
  end
end

If the index action is hit with the HTML mime-type, Merb will look for index.html.*. If it's hit with the JSON mime-type, Merb will look for index.json.*. There are also some other variants:

  • render :new looks for new.html.*
  • render “new” renders the string “new” inside the current layout

Display

On the other hand, the display method tries to convert an object into the current mime-type. It uses the following strategy.

  • First, it tries to render the template using render.
  • If that fails, it converts the object using the registered conversion method.

For instance,

class Post < Application
  provides :json
 
  def index
    @posts = Post.all
    display @posts
  end
end

If index is triggered with the HTML mime type, Merb will first look for index.html.*. If that fails, it will try to call @posts.to_html. If that fails, it will raise a NotAcceptable error.

If it's triggered with the JSON mime type, Merb will first look for index.json.*. If that fails, it will try to call @posts.to_json. If that fails, it will raise a NotAcceptable error.

Additionally, display's second parameter will be passed into render. For instance, display @posts, :new will first look for new.json.* and then try to call @posts.to_json.

Recommended Route

Because every URL in HTTP represents a “resource”, your actions should reflect this as well. As a result, you should always use display. Even if you just want to do a render, using display makes the object backing your template explicit. And if you decide to add web-service support to your action later, you simply need to add provides :json or provides :xml to your model, and you're ready to go.

 
faqs/what_s_the_difference_between_the_render_and_display_methods_in_a_controller.txt · Last modified: 2008/10/23 08:07 by 81.6.252.200