У меня есть приложение для магазина и другой сайт для специальной акции.Я использовал Active Resource для импорта товаров из магазина на промо-сайт и добавил корзину для товаров.Однако, чтобы фактически заказать продукты, мне нужно отправить их в приложение магазина, создав там новую корзину для завершения заказа.
Я сделал демонстрационное приложение 'RESTful', чтобы попрактиковаться в использовании xml для отправкиданные туда-сюда, поэтому я пытаюсь использовать принципы REST для реального приложения.Тем не менее, мне нужно отправить продукты на контроллер без RESTful.Просто, чтобы дать вам представление о контроллере корзины в магазине, вот его действия:
def index…
def add…
def checkout…
def update…
def remove…
def empty…
def apply_discount…
def remove_discount…
def apply_credits…
def remove_credits…
def stock_check…
# My action to accept items from carts in other apps
def cart_import…
А в routes.rb
единственный маршрут, относящийся к корзине, в настоящее время
map.cart 'cart/:action/:id', :controller => 'shop/cart'
Я унаследовал приложение магазина от предыдущего разработчика, поэтому я, вероятно, попытался бы сделать его более RESTful, если бы делал его с нуля.
В любом случае, я довольно уверен, что смогузаставить корзину отвечать на XML, даже не будучи определенным с помощью map.resources
.Моя проблема заключается в том, как отправить из промо-приложения хэш товаров и их количества в корзине.
Чтобы сгруппировать товары и количества в корзине, я собрал идентификатор продукта и количество товара в хэш:
<% @items = Hash.new %>
<% @cart.items.collect {|i| @items[i.product_id] = i.quantity} %>
Который при проверке дает следующий результат:
<%= Rails.logger.info @items.inspect %>
{1144=>2, 1143=>1}
Поэтому я решил отправить их в магазин и мог бы передать их в опубликованном link_to
:
<%= link_to 'Export Cart', "http://shop.example.com/cart/cart_import", :items => @items, :method => :post %>
Это, похоже, ничего не делает, тогда как пропуск первого поля добавляет элементы к URL в формате, который выглядит разумным, но отображается как относительная ссылка в рекламном приложении:
<%= link_to "http://shop.example.com/cart/cart_import", :items => @items, :method => :post %>
http://promo.example.com/cart?items[1143]=1&items[1144]=2&method=post
Я уверен, что ключ в том, что объект @items
должен быть передан с URL, но так как я не могу использоватьименованный маршрут, я не знаю, как его туда доставить, чтобы он был выложен в правильном формате.
Спасибо за помощь,
Гарет