私はajaxでフィルタリング機能を作って部分的にレンダリングしようとしています。私がこれら二つを必要とするのは、再ロードしてはいけない要素があるからです。このため、私はajaxでフィルタリングされたデータを取得しようとしており、フィルタリングされたデータを部分的にレンダリングしています。何かがあれば私はあなたにもっと知ってもらわなければならないと教えてください。Ajaxでレンダリングして部分的にレンダーする
インデックスページの作成は問題ありません。
コントローラ/ item_controller.rb
def index
@items = Item.all
end
ビュー/アイテム/ index.html.erb
<div>
An element that should not be reloaded
</div>
<div id="item_list_wrapper">
<%= render partial: 'item/item_list' %>
</div>
ビュー/アイテム/ item_list.erb
<% @items.each do |i| %>
something
<% end %>
私がクリックしたときボタンを押すと、ajaxが呼び出され、item/item_list.erbがリロードされます。
コントローラ/ item_controller.rbが
def item_filter
filtered_items = Item.where(filtered item)
render json: filtered_items
end
javascriptの
$.ajax({
method: 'get',
url: '/item/filter',
dataType: 'json',
data: {
price: $('#price').val()
},
success: function(data) {
console.log(data);
$("#item_list_wrapper").html("<%= escape_javascript(render partial: 'item/item_list') %>");
},
error: function(){
alert('error');
}
});
私は私のコンソールでのAjaxと呼ばれるデータを見ることができます。数日はかかりましたが、リロードされたitem/item_list.erbの@itemsというデータをajaxという名前で使用する方法を見つけることはできません。すべてのコメントをお寄せいただきありがとうございます。
あなたのルートの名前は複数で '/ items'にする必要があります。 – max
ファイル名はapp/views/items/filter.js.erbであるべきだと思います。 – abax
良いキャッチ@abax。 – max