0

この質問は、SOで何度か尋ねられたことを知っていますが別の方法で行うことに興味がありました。私の Ruby on Rails アプリでは、UsersController.rbコントローラーにlistというアクションがあります。このリストを 3 つの異なるものに対応させたい

  1. ページ自体。指定したユーザーのページ全体をレンダリングする
  2. 指定したページのユーザーの JSON リスト
  3. HTML としてフォーマットされた、指定しているページの行のみの部分的なビュー。

ユーザーのページ 1 を含むテーブルを含むフル ページ (ヘッダー、フッター、すべて) を想像してください。ページ 2 をクリックすると、同じコントローラ アクションに ajax リクエストを開始して、ページ 2 の html 行だけを取得したいと考えています。私はそれがこのように見えると想像します。

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 の戻り型としてスネークする必要がありますか?

4

2 に答える 2

3
  1. format.js3 行目に使用します。
  2. パーシャル html をパーシャルに置き、それを呼び出しますapp/views/users/_html_rows.html.erb
  3. そのパーシャルを完全な html と js バージョンの両方でレンダリングします。

app/views/users/list.html.erb次のような完全な html コンテンツが含まれます。

<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 %>");

これはおそらくあなたの問題を解決します。

于 2012-11-15T18:49:25.650 に答える