调用特定的respond_to块方法

时间:2017-08-20 16:13:36

标签: ruby-on-rails ruby-on-rails-5

我正在尝试格式化link_to标记,以便使用以下respond_to块生成pdf文件(wicked_pdf gem):

respond_to do |format|
      format.html
      format.pdf do
        render pdf: "file_name" 
      end
    end

我已经用javascript方法创建了块。但是,渲染JS很容易:只在表单中添加remote: true

对于其他mime类型或respond_to块方法,我不知道如何编写我的link_to标签让控制器知道我想要一个针对另一个的特定方法......

1 个答案:

答案 0 :(得分:1)

respond_to块确定要呈现哪种格式的方法之一是查看url的扩展名。例如,如果我在我的路线中:

Rails.application.routes.draw do
  get 'home/index', as: 'home'
end

然后在我的控制器中:

class HomeController < ApplicationController
  def index
    respond_to do |format|
      format.html { render inline: 'HTML' }
      format.pdf { render inline: 'PDF' }
    end
  end
end

我可以使用format.pdf扩展程序获取.pdf

$ curl http://localhost:3000/home/index.pdf
# PDF
$ curl http://localhost:3000/home/index.html
# HTML

创建link_to时,您可以通过将其传递到url_for(或您正在使用的任何指定路线助手)来告诉它使用哪个分机:

<%= link_to 'View the PDF', url_for(controller: 'home', action: 'index', format: 'pdf') %>
# => <a href="/home/index.pdf">View the PDF</a>
<%= link_to 'View the PDF', home_path(format: 'pdf') %>
# => <a href="/home/index.pdf">View the PDF</a>

我认为remote: true的工作方式是设置接受标头。 Rails还用它来确定要调用的respond_to项:

$ curl -H 'Accept: application/pdf' http://localhost:3000/home/index
# PDF