2012-01-10 4 views
1

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

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

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?

ответ

1

Отличный учебник, сделал это сам: 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')) %>") 

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

+0

В файле .js.erb, что будет вместо «your_form»? Класс кнопки? –

+0

«your_form» - это идентификатор div, который вы использовали в главном html-файле, чтобы отображать информацию, которую вы хотите обновить с помощью запроса ajax. Может быть кнопка, где вы хотите, чтобы текст изменился, или ярлык для отображения новой информации. – Pete

+0

Книга, на которой предоставлена ​​ссылка у вас есть только 11 глав ..: P –

2
  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.