Вы на рельсах 3? Rails3 поддерживает ненавязчивый JavaScript (UJS). Посмотрите на файл public / javascripts / rails.js
Как это работает?
Чтобы создать удаленную форму, сделайте следующее:
<%= form_tag :action=> "register_user", :remote => true %>
это добавляет атрибут data-remote к вашей форме.
Теперь UJS, встроенный в рельсы, подключается и выполняет для вас функцию отправки. Это запускает события как:
ajax: до, ajax: завершено, ajax: успешно, ajax: сбой, ajax: после
Rails по умолчанию использует прототип, а не jQuery, так что вы можете (не обязательно) заменять прототип на jQuery. Читать http://www.railsinside.com/tips/451-howto-unobtrusive-javascript-with-rails-3.html
Важной частью сейчас является то, что вы можете отслеживать эти события в своей форме! Дайте вашей форме идентификатор для ее идентификации:
<%= form_tag :action=> "register_user", :remote => true, :html => { :id => 'myform' } %>
Теперь перехватите события (с помощью jQuery) следующим образом:
jQuery(document).ready(function() {
jQuery('#myform').bind('ajax:complete', '', function(request) {
alert("I got: " + request.responseText);
});
});
вы также можете перехватывать другие события, такие как ajax: сбой и т. Д.
Редактировать
Для Rails 2.3.8 (убедитесь, что вы включили js-файлы rails по умолчанию)
Примечание Если вы хотите использовать только jquery и удалить стандартную библиотеку прототипов, вы можете использовать jRails (заменяет прототип на jQuery): http://github.com/aaronchi/jrails
Я не знаю, какое у вас @final_value, поэтому я сделал общий пример:
На ваш взгляд:
<h2 id="myoutput">
<% if @final_value != nil %>
<%= @final_value.to_s %>
<% end %>
</h2>
<% form_remote_tag :url => { :action=> "register_user" } do %>
<label for="user_id_1">user_id_1:</label><br/>
<%= text_field "user", "user_id_1", :size => 20 %>
<label for="user_id_2">user_id_2:</label><br/>
<%= text_field "user", "user_id_2", :size => 20 %>
<%= submit_tag "Submit" %>
<% end %>
В вашем контроллере:
def register_user
form_data = params['user']
if form_data.is_a?(Hash)
@final_value = form_data['user_id_1']
end
respond_to do |format|
format.html
format.js do
render :update do |page|
page.replace_html 'myoutput', @final_value
page.visual_effect :highlight, 'myoutput'
end
end
end