Как передать объект в частичное использование контроллера? - PullRequest
0 голосов
/ 07 января 2019

Я пытался передать свой объект Product моему отрендеренному фрагменту, но независимо от того, что я пробую, он не работает. На главной странице есть кнопка быстрого просмотра, которая выдает модальное (частичное), и я хочу передать ему правильный продукт.

Маршрут

get 'shop-product-ajax-page', to: "pages#shop_product_ajax_page"

Домашняя страница (для краткости сокращена только ссылка)

<% @products.each do |product| %>
  <%= link_to "Quick View", shop_product_ajax_page_path, :data => {:lightbox => 'ajax'} %>
<% end %>

Действие контроллера

def shop_product_ajax_page
  render :partial => 'pages/shop_product_ajax_page', :layout => false
end

Прямо сейчас кнопка работает и отображает HTML-код в модальном режиме. Я хочу, чтобы можно было заполнить правильную информацию о продукте для любого продукта Quick View.

1 Ответ

0 голосов
/ 07 января 2019

Проблема заключается в том, что ссылка создает совершенно отдельный AJAX-запрос, она попадает на сервер отдельно, поэтому ожидаемый контекст Ruby (переменные и т. Д.) Недоступен в этом новом запросе.

Два варианта:

  • Не отправляйте AJAX-запрос, а визуализируйте лайтбокс как часть страницы. Вы можете скрыть его с помощью display: none или аналогичного, а затем использовать Javascript для отображения при нажатии на ссылку.
  • Сделайте запрос таким, какой вы есть в данный момент, но передайте те же параметры, которые использует ваше текущее действие контроллера для получения @products, а в shop_product_ajax_page сделайте то же самое, чтобы попасть в базу данных и получить продукты.

Второй вариант может быть проще, если не связываться с JS. Это было бы что-то вроде:

def shop_product_ajax_page
  @products = get_products_from_params(params)
  render :partial => 'pages/shop_product_ajax_page', :layout => false
end

private

  def get_products_from_params(params)
    Product.find(params["product_ids"]) # or whatever you're currently doing
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...