Как использовать link_to_remote с формой в качестве удаленного URL? - PullRequest
0 голосов
/ 03 июля 2010

Я хочу отобразить форму (поля и включает кнопку отправки) при использовании link_to_remote - форма появляется с помощью вызова ajax.

Мне бы хотелось, чтобы эта форма вела себя так, как любая другая форма (это базовая новая активная запись), ничего особенного.

Однако при отправке я бы хотел, чтобы исходная родительская страница оставалась статичной без обновления, и вместо формы вместо нее появлялось уведомление (ваша форма была успешно отправлена).

Текущее поведение при отправке перенаправляет всю страницу.

Я положил пульт в метод:

<%= do_event_remote(contact_event, event) %>

И вот этот вспомогательный метод:

  def do_event_remote(contact, call_or_email_or_letter) 
    model_name = call_or_email_or_letter.class.name.tableize.singularize 
    link_to_remote "#{model_name.camelize}", 
                   :url => send("new_contact_#{model_name}_path", 
                                            :contact => contact, 
                                            :status => 'done',
                                            :"#{model_name}" => call_or_email_or_letter ),
                   :update => 'remote_event'                                     
  end 

Спасибо ...

1 Ответ

0 голосов
/ 03 июля 2010

Вы создаете форму как обычно, но используете remote_form_for вместо form_for и remote_form_tag вместо form_tag. Это отправит форму через ajax.

Документация по адресу: http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html

Обновление: пример:

В вашей форме (с использованием haml):

= remote_form_for @customer, :url => customer_path(@customer), :complete => "doSomething(request)" do |f|
  %p
    First Name<br>
    = f.text_field :first_name
  %p
    Last Name<br>
    = f.text_field :last_name
  = submit_tag "Update"

Для ваших функций затухания вам нужно будет использовать scriptaculous или jquery. Scriptaculous поставляется с рельсами и в настоящее время используется по умолчанию. Для этого ваш javascript будет выглядеть примерно так:

function doSomething(request){
  Effect.fade('some_div');
}

подробнее о сценариях: http://wiki.github.com/madrobby/scriptaculous/

...