AJAX с Rails 3 - PullRequest
       22

AJAX с Rails 3

1 голос
/ 10 января 2012

Я хочу добавить некоторые функции AJAX в мое приложение Rails, но не знаю, с чего начать.

Вот метод, который добавляет товар в заказ:

def add_item_to_order
 if session[:order_id].nil?
   @order = Order.new #Don't create an order until there is an item to be added to it.
   @order.account_id = session[:user_id]
 else
   @order = Order.find(session[:order_id])
 end
 item = Item.find(params[:id])
 o_item = OrderItem.new
 o_item.item_id = item.id
 @order.order_items << o_item
 @order.total += item.sale_price
 @order.save
 session[:order_id] = @order.id
 redirect_to order_home_path
end

Это запускается, когда пользователь нажимает:

<%= link_to item.name, add_item_to_order_path(item.id), :class => "fixed medium green button"%>

Может кто-нибудь дать мне какие-нибудь советы о том, как начать, так что товар добавляется в заказ через AJAX?

Ответы [ 2 ]

2 голосов
/ 10 января 2012
  1. Проверьте, как render JavaScript. В обычных запросах можно перенаправить к какому-либо действию или визуализировать некоторое представление и т. Д., Для XHR (XmlHttpRequest) вы можете render javascript через серверный js-шаблон, который будет отображаться. Вам придется использовать LegacyPrototypeHelpers, предоставленный для Rails-3, так как оригинальные помощники были официально доступны только для Rails-2.

  2. Лучшим подходом (ненавязчивым, как предпочитает Rails 3) будет отправка некоторых данных с сервера. В следующем примере, который у вас есть выше, я предполагаю, что если вы отправите item.id через объект JSON или другой формат, а затем прочитаете его в обратном вызове успеха того места, откуда вы сделали XMLHttpRequest, то после получения item.id Вы можете создать HTML, который создает link_to, и затем добавить его в DOM.

1 голос
/ 10 января 2012

Отличный учебник, сделал это сам: http://ruby.railstutorial.org/ruby-on-rails-tutorial-book В главе 12 есть кое-что о Ajax.

Важной частью является установка параметра link_to data-remote в true:

<%= link_to item.name, add_item_to_order_path(item.id), 
    :class => "fixed medium green button" data-remote="true" method="post"%>

и в свой контроллер вы добавляете

def add_item_to_order
    # other stuff
    # at the bottom:
    respond_to do |format|
          format.html { redirect_to order_home_path }
          format.js
        end

end

Затем вам понадобится файл .js.erb для обработки ответа format.js:

$("your_form").update("<%= escape_javascript(render('partial_page')) %>")

ичастичный файл страницы для хранения новых данных ..

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