Все получилось, в итоге все было очень просто.
Шаг 1 - добавить :remote => true
к ссылкам на боковой панели
#application.html.haml
%nav#sidebar
- for post in @posts
= link_to post.title, post_path, :remote => true
%div#main
= yield
Шаг 2 - скажите вашему контроллеру, чтобы он ответил JS на действие show
def show
@post = Post.find(params[:id])
@posts=Post.all # needed for sidebar, probably better to use a cell for this
respond_to do |format|
format.html # show.html.erb
format.js # show.js.erb
end
end
Шаг 3 - Создать _post.html.haml
# _post.html.haml
%article.post
= sanitize post.body
Шаг 4 - Создайте show.js.erb и замените html в div #main содержимым партиала _post (который мы создали на шаге 3)
# show.js.erb
$("#main").html("<%= escape_javascript(render @post) %>");
Теперь весь контент передается через ajax, и он работает нормально.