[英]Returning: A full page, JSON, and a partial HTML snippet from Ruby on Rails Controller
我知道這個問題的部分原因是問了幾個其他倍左右,但我很好奇,這樣做的方式不同。 在我的Ruby on Rails應用程序中 ,我的UsersController.rb控制器上有一個名為list的動作。 我希望這份清單回應3種不同的事物
想象一個包含用戶第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返回類型?
format.js
。 app/views/users/_html_rows.html.erb
。 您將擁有包含完整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.