Загрузить объект формы при получении из ajax - PullRequest
0 голосов
/ 19 сентября 2018

У меня есть форма, которая отображает частичную 'форму'.

= form_for(@booking, :as => :booking, :url => admin_bookings_path, :html => { :multipart => true }) do |f|
  = render partial: "form", locals: { f: f }

Внутри частичной формы снова отображается другая частичная на основе new_record?.

- if f.object.new_record?
  #extra-products
    = render partial: 'new_booking_extra_product', locals: { f: f }
- else
  = render partial: 'extra_product', locals: { f: f }

В бронировании # new, когда пользователь выбирает конкретный car_id, я хочу показать связанные продукты с ним через ajax.Для этого я использовал ajax, чтобы сделать запрос на заказыне определено в этом состоянии.Как лучше всего получить объект или как решить эту проблему?

1 Ответ

0 голосов
/ 21 сентября 2018

При получении запроса 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...