0

我有一个正在显示的用户列表,您可以单击“显示用户”或“PDF”以 HTML 或 PDF 文档形式查看该用户的详细信息。该节目是使用脚手架自动创建的,现在我正在尝试添加以 PDF 格式查看它的选项。问题是添加第二个 GET 选项,如果我将用户作为参数传递,则假定它是一个 POST,并且我收到一个错误,即 POST 路由不存在。我不是要更新用户,只是以不同的方式显示它,基本上是添加第二个“显示用户”选项。

我如何告诉它我想要一个 GET,而不是一个 POST?有没有更简单的方法来做我想做的事情?谢谢。

4

5 回答 5

4

请创建一个这样的控制器:

class ClientsController < ApplicationController
  # The user can request to receive this resource as HTML or PDF.
  def show
    @client = Client.find(params[:id])

    respond_to do |format|
      format.html
      format.pdf { render pdf: generate_pdf(@client) }
    end
  end
end

请使用 post 和 get 更新 route.rb 文件、操作名称,如下所示:

match 'action_name', to: 'controller#action', via: 'post'
match 'action_name', to: 'controller#action', via: 'get'

更多信息请阅读此链接:“ http://guides.rubyonrails.org/routing.html

于 2013-09-03T09:18:29.030 回答
2

你还没有发布任何代码或细节,所以我猜你想要这样的东西:

路线

resources :users

控制器

class UsersController < ActionController::Base
  def show
   @user = User.find(params[:id])
   respond_to do |format|
        format.html # show.html.erb
        format.pdf    # handle the pdf response
    end
  end
end

查看文件views/users/show.pdf.prawn

prawn_document() do |pdf|
    @user.each {|r| pdf.text r.id} # will print user id of the user
end

上面示例的工作方式是,如果有东西访问以下 URL,他们将获得 html 文件:

localhost:3000/users/1 #html is the default format in rails
localhost:3000/users/1.html

但如果他们访问.pdf,他们将获得 pdf 格式。

localhost:3000/users/1.pdf

如果以上假设是正确的,那么检查prawnwicked_pdfpdf gem。上面的例子使用了虾

于 2013-09-03T09:21:30.820 回答
1

查看此链接http://apidock.com/rails/ActionController/MimeResponds/InstanceMethods/respond_to。您可以添加一个新的 MIME 类型并在您的所有 Rails 路线中以 pdf 格式传递 :format。

希望这会有所帮助。

于 2013-09-03T09:17:52.543 回答
1

对于 POST 请求,请检查您的 config/routes.rb 应该已经有几条路线,因此您可以推断出您需要的路线。

于 2013-09-03T09:19:02.997 回答
1

在您的链接中,您可以传递一个名为 format for pdf 的附加参数。例如

<%= link_to 'Display in PDF', "/user/pdf", :format => "pdf" %>
于 2013-09-03T09:26:06.580 回答