Я использую метод, описанный в комментарии @ cailinanne к посту Дана Л., и он хорошо сработал для меня.Мне нравится удобочитаемость тега данных, который прикреплен к div.В вашем html вы можете точно увидеть, что будет загружаться в этот div, и вам не нужно добавлять какой-либо новый JS, если вы хотите добавить эту функциональность к нескольким div или страницам.
Из этой статьи:http://tech.thereq.com/post/16479390885/loading-page-content-via-ajax-in-rails-3-1
Самый простой способ сделать это - использовать метод загрузки jQuery.
$("#comments").load("/blogs/2/comments");
Неудобной частью является путь AJAX (/ blogs / 2 / comments), который явно меняется в соответствии сна какой блог мы просматриваем.Если бы мы точно следовали документации jQuery, мы могли бы просто поместить тег скрипта в середину нашего тела HTML, чтобы в нашем файле шаблона у нас могло быть что-то вроде
# show.html.erb
<div id="comments"></div>
<script>
$("#comments").load("<%= blog_comments_path(@blog)%>");
</script>
Yuck.Не фанат javascript, смешанного с моими файлами шаблонов.
Что делать вместо этого?Следуйте шаблону, предложенному Rails UJS, и используйте новые атрибуты данных HTML.
Во-первых, когда вы хотите загрузить содержимое AJAX на своей странице, сделайте следующее в своем шаблоне
#show.html.erb
<div id="comments" data-load="<%= blog_comments_path(@blog. :format => :js)%>">
</div>
Во-вторых, добавьте следующее в ваш application.js
# application.js or any JS file loaded within application.js
$("div[data-load]").filter(":visible").each(function(){
var path = $(this).attr('data-load');
$(this).load(path);
});
В-третьих, настройте маршрут, который соответствует запросу get для blog_comments (введите rake routes
, чтобы увидеть, как называются ваши маршруты)
# routes.rb
# ajax load at page load
get "/blogs/comments" => "blogs#comments"
И вуаля!Ваш комментарий div будет волшебным образом заполнен тем, что будет возвращено путем / blogs / 3 / comments!