При получении запроса Ajax вы захотите визуализировать частичное представление на стороне сервера связанных продуктов.Затем вы можете отправить HTML-код из этой части как часть вашего ответа и использовать обратный вызов Ajax success
, чтобы прикрепить частичное представление к DOM так, как вы этого хотите.Тогда вы можете иметь (в своем контроллере) код примерно так:
def fetch_extra_product
# Unless you're using @car_id in a view or something, I'd just
# just use a local variable instead of an instance variable
#
car_id = params[:car_id] || Car.all.order('id desc').first.id
@extra_products = Car.find(car_id).extra_products
respond_to do |format|
format.js { render partial: 'extra_products_div', status: :ok }
end
Тогда ваш частичный код будет выглядеть примерно так:
<div class="extra-products">
<% @extra_products.each do |product| %>
<h2><%= product.name %></h2>
...
<% end %>
</div>
Таким образом, ваш JavaScript может потом идти дальшестроки:
$.ajax(url, {
type: 'GET',
success: function(msg) {
$('#foo').attach(msg);
},
error: function(msg) {
console.log('Error!!!');
}
});
Еще один комментарий: Если ваш API только собирается получить запрос на этот маршрут через Ajax, вам не нужен блок respond_to
.В этом случае вы можете просто поставить render partial: 'extra_products_div', status: :ok
под строкой, в которой вы определяете @extra_products
.