Home > Blockchain >  How to share a view between formats with Rails
How to share a view between formats with Rails

Time:08-03

I have a Rails controller which provides both HTML and PDF responses, and thus I have view.pdf.haml and view.html.haml files. These are either identical or extremely close to identical.

How can I have Rails use a single view for multiple formats?

CodePudding user response:

One option is to have your view.html.haml file simply render the view.pdf.haml file as a partial, or vice versa. This does use two views, but one view will just be a single line, pointing to the other.

However, here is one way to point both formats to the same view in your controller:

    respond_to do |format|
      format.html { render(file: '<replace with relative/absolute path to view>') }
      format.pdf  { render(file: '<replace with relative/absolute path to view>') }
    end

CodePudding user response:

Do you mean have the same action serve up different resource types - i.e. both a web page and a PDF? If I understand the problem, you can use the respond_to method.

def show
  @object = Object.find params[:id]

  respond_to do |format|
    format.html
    format.pdf { ..code to render the pdf.. }
  end
end

That ..code to render the pdf.. is the tricky part. There are PDF gems that support inline rendering, but you may end up using send_data or similar to set a file name, disposition, etc and deliver the PDF document to the end user.

  • Related