Я хотел бы использовать jQuery для обновления партиала на странице, но я не могу заставить партиал работать, потому что требуемая коллекция недоступна после выполнения кода jQuery.
У меня естьдействие show в контроллере Users:
def show
@user = User.find(params[:id])
@title = "#{@user.first_name} #{@user.last_name}"
@posts = @user.posts.paginate(:page => params[:page], :per_page => 20 )
@discussions = @user.discussions.paginate(:page => params[:page], :per_page => 2)
end
Это делает коллекции @posts и @discussions доступными на странице показа пользователя для передачи в партиалы следующим образом, в show.html.erb:
<div id="synopsis">
<%= render :partial => 'users/post', :collection => @posts %>
</div>
<div class="pagination_links">
<%= will_paginate(@posts) %>
</div>
Однако, скажем, я хочу заменить сообщения, отображаемые на странице показа пользователя, на обсуждения пользователя, т. Е. Использовать @discussions, доступные в действии показа.Для этого я настроил настраиваемое действие в контроллере Users с именем show_discussions и заставил маршруты к нему работать.это действие:
def show_discussions
respond_to do |format|
format.js
end
end
Ссылка на show_discussion.js.erb
$("#synopsis").html("<%= (escape_javascript("#{render(:partial => 'discussion_activity', :collection => @discussions)}")).html_safe %>");
Этот файл успешно заменяет #synopsis, но не заполняет его ничем - так как коллекция @discussions не делает 'Не удается выполнить удаленный вызов этого действия.Как я могу исправить это так, чтобы обсуждения пользователей стали доступны после удаленного вызова?
ОБНОВЛЕНИЕ: Я делаю запрос ajax, используя файл js.Я указываю, чтобы получить действие пользователя show_discussions при нажатии кнопки:
$(function() {
$('#show_discussions').live("click", function() {
$.get('/users/show_discussions');
});
$('#show_posts').live("click", function() {
$.get('/users/show_posts');
});
});