答え、ここに(おそらく)過度に簡略化された模擬があります。
クライアントビュー ここでは、部分的に指し示すrender
を呼び出す必要があります。この部分データにはテーブルデータが含まれます(後で再開できるようになります)。また、jqueryがクライアントデータの非同期フェッチを簡単に行うことができるクラスをselectステートメントに与える必要があります。
# app/views/clients/index.html.erb
<%= select_tag "business", options_from_collection_for_select(Business.all, "id", "name"), class: "car-select" %>
<div class="clients-table">
<%= render "table_list" %>
</div>
あなただけのインデックスビューを切り出しテーブルで 部分的な表には、部分的
# app/views/clients/_table_list.html.erb
<table>
<thead>
<tr>
<th>Month year</th>
<th>Business</th>
<th>Bill charge</th>
</tr>
</thead>
<tbody>
<% @clients.each do |client| %>
<tr>
<td><%= client.month_year %></td>
<td><%= client.business.try(:name) %></td>
<td><%= client.bill_charge %></td>
</tr>
<% end %>
</tbody>
</table>
AJAXスクリプト これに貼り付ける必要があります変更を監視してクライアントデータの要求を提出する必要があります
企業コントローラのプロセスを使用すると、URLに呼び出しているあなたのAjaxリクエストで を要求するような、「http://yourapp.com/businesses/23」、本当にあなたのビジネスコントローラのshow
アクションを当たります。完全にRESTfulで、ルートを変更する必要がないため、この方法で実行する必要があります。しかし、クライアントのインスタンス変数を提供するアクションを編集する必要があります。
# app/controllers/businesses_controller.rb
def show
@business = Business.find(params[:id])
@clients = @business.clients (this assumes that you already have a proper has_many/belongs_to relationship between business and client)
respond_to do |format|
format.html
format.js
end
end
UJSビュー パズルの最後のピースは、UJS図です。これは、js要求タイプが特定のコントローラアクションに送信されたときにのみ呼び出されるjavascriptです。この場合、ビジネスコントローラのshowアクション。これは新しく作成された@clients
を取り、既存のテーブルを部分データと新しいデータに置き換えます。
#app/views/businesses/show.js.erb
$(".clients-table").html("<%= escape_javascript(render('/clients/table_list', client: @clients)) %>");
さらに複雑なことや質問が残っている場合は、UJSテンプレートとコールバックについて少し研究してください。
出典
2016-04-15 15:21:10
trh
ページがレンダリングされる前にRubyが処理され、ユーザーアクションがその後に来るので、そこにHTML値を入れることはできません。選択を送信して結果を返すには、AJAXを使用する必要があります。 – RichardAE