Если вы используете более позднюю версию Rails и хотите сделать это как можно более ненавязчивым, вы должны использовать опции: response_to в вашем контроллере, например:
class MyController < ApplicationController
def first_method
respond_to do |format|
format.html # this handles normal requests asking for html
format.js # this handles requests asking for javascript to be sent instead
end
end
end
Если вы отвечаете на клик, вам нужно будет выполнить запрос, например, на странице
$("a.element_you_click_to_trigger").click(function(e) {
e.preventDefault(); // make sure clicking doesn't trigger unneeded event bubbling
$.ajax({url: "/controller/first_method", type: "POST", dataType: "script"}); // send a request and tell the server that you want javascript back
}
Так же, как у вас есть файл index.html.erb в вашей папке представлений для этого контроллера, у вас будет аналогичный файл first_method.js.erb
в соответствующей папке представлений вдоль стороны
Ваш index.html.erb
файл:
views
controller
index.html.erb
first_method.js.erb
Это вернет javascript, который исполняется на стороне клиента, но получает на стороне сервера сборки, поэтому вы можете содержать фрагменты ERB rails, чтобы вы могли сделать что-то вроде этого:
$('#loading_placeholder_element').html('<%= escape_javascript(render(:partial => "create")) %>');
// do some other stuff you fancy in the page
// then make the next call once the other stuff is over (you may need to add this as a call back on an animation):
$.ajax({url: "/controller/second_method", type: "POST", dataType: "script"});
Затем вы повторите этот же процесс снова для каждого из более длинных методов, выделенных fsmf.
Я нашел это Railscast на jQuery невероятно полезным, когда я изучал это пару месяцев назад, и я действительно рекомендовал бы его.
Надеюсь, это поможет!