簡體   English   中英

返回:Ruby on Rails Controller的整頁,JSON和部分HTML代碼段

[英]Returning: A full page, JSON, and a partial HTML snippet from Ruby on Rails Controller

我知道這個問題的部分原因是問了幾個其他倍左右,但我很好奇,這樣做的方式不同。 在我的Ruby on Rails應用程序 ,我的UsersController.rb控制器上有一個名為list的動作。 我希望這份清單回應3種不同的事物

  1. 頁面本身。 整理我指定的用戶的整個頁面
  2. 我指定的頁面的JSON用戶列表
  3. 我指定的頁面行的部分視圖格式為HTML。

想象一個包含用戶第1頁的表的整個頁面(頁眉,頁腳,所有內容)。 當我單擊第2頁時,我想向同一控制器動作發起ajax請求,以僅向我提供第2頁的html行。我還希望保留JSON API,但仍允許我的控制器在被詢問時返回JSON列表。 我想象它看起來像這樣。

class UsersController < ApplicationController
    def list
        respond_to do |format|
            format.html # RETURNS MY VIEW
            format.json # RETURNS MY JSON LIST
            format.partial_html # RETURNS MY PARTIAL HTML
        end
    end
end

無論如何,RoR可以做到這一點嗎? 還是我注定不得不在控制器中創建另一個操作以僅返回技術上相同的數據?

我可以通過指定自己的MIME類型來實現這一點嗎? 我是否應該把XML作為XML返回類型?

  1. 在第三行上使用format.js
  2. 將部分html放在部分上,稱為app/views/users/_html_rows.html.erb
  3. 在完整的html和js版本上呈現該部分內容。

您將擁有包含完整html內容的app/views/users/list.html.erb ,如下所示:

<html>
<body>
.....
<table id="my_table"><%= render 'users/html_rows', users: @users %></table>
</body>
</html>

您將擁有以下app/views/users/_html_rows.html.erb

<tbody>
  <% users.each do |user| %>
    <tr>
      <td>user.name</td>
    </tr>
</tbody>

然后,您將擁有以下app/views/users/list.js.erb

$("#my_table tbody").html("<%= render 'users/html_rows', users: @users %>");

這可能會解決您的問題。

您可以添加一個額外的mime類型條目以與respond_to config/initializers/mime_types.rb ,添加:

# htmlp means "html partial"
Mime::Type.register "text/html", :htmlp

現在,您可以在控制器中執行以下操作:

def list
  respond_to do |format|
    format.html
    format.json
    format.htmlp { render layout: nil }
  end
end

並創建一個名為list.htmlp.erb的模板,其中包含部分內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM