mardi 13 décembre 2016

Rails: handling errors within respond_to block (csv)

I have a search method on my controller that responds to either the html or CSV format. The html format renders the search results as expected, and I want the CSV format to work by downloading a CSV file of the results.

Most of the time, send_data is called and the CSV file is generated. However there are situations in which I don't want to generate the CSV, and instead show an error (for example when a user has used all of their allotted exports for the month). The following code is a simplified version of what I'd like to do, however this doesn't seem to like how I'm attempting to handle the error.

    respond_to do |format|
      format.html do
         @results = ...
         render "index"
      end

      format.csv do
        @results = ...

        if user_can_export?(@results)
          send_data generate_csv(@results), filename: "Search-Results.csv"
        else
          flash[:error] = "Unable to export search results".
          render "index"
        end
      end
    end

Is there any way for me to break out of this block and render HTML or am I stuck generating a csv file here? I'd prefer to not handle this situation by sending a csv file with an error message contained in it, but that seems like my best option at the moment. Help is appreciated!

Aucun commentaire:

Enregistrer un commentaire