Комментарии AJAX micropost на странице пользователя - PullRequest
0 голосов
/ 30 марта 2012

На странице пользователя есть микросообщения, и у каждого из них есть своя форма комментария и комментарии.Используя "Endless Page" railscast, я пытаюсь создать кнопку "показать больше комментариев", которая будет загружать комментарии AJAX.Но это не работает.

Проблема в файле show.js.erb, потому что:

1) обычная нумерация комментариев (без AJAX) работает хорошо

2) "Показать больше кнопок" тоже работает хорошо.Я проверил это на странице списка пользователей

Я думаю, что "показать больше комментариев" не работает, потому что он не понимает <% = j render (comments)%>, <% = j will_paginate (comments)%> и у меня должны быть переменные типа <% = j render (@comments)%>, <% = j will_paginate (@comments)%> .

Но когда я пытаюсь записать в свой файл users_controller.rb

def show
    @micropost = Micropost.find(params[:micropost_id])
    @comments = @micropost.comments
end

, это не работает, потому что на странице моего пользователя много микросообщений, и у меня появляется ошибка "Невозможно найти микросообщение безидентификатор ".Так что в моем microposts / _micropost.html.erb мне пришлось использовать это

<% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>

<%= render comments %>

Может кто-нибудь, пожалуйста, помогите?Как мне изменить мой show.js.erb?

users / show.html.erb

<%= render @microposts %>

microposts / _micropost.html.erb

...
micropost's content
...

    <%= render 'comments/form', micropost: micropost %>

    <% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>

    <div class="commentaries">
      <%= render comments %>
    </div>      

    <div id="append_and_paginate">
      <%= will_paginate comments, :class =>"pagination", :page_links => false %>
    </div>

javascripts / users.js.coffee

jQuery ->
  if $('.pagination').length
    $('#append_and_paginate').prepend('<a id="append_more_results" href="javascript:void(0);">Show more</a>');
    $('#append_more_results').click ->
      url = $('.pagination .next_page').attr('href')
      if url
        $('.pagination').text('Fetching more...')
        $.getScript(url)

users / show.js.erb

$('.commentaries').append('<%= j render(comments) %>');
<% if comments.next_page %>
  $('.pagination').replaceWith('<%= j will_paginate(comments) %>');
<% else %>
  $('.pagination').remove();
<% end %>
<% sleep 0.3 %>

1 Ответ

0 голосов
/ 30 марта 2012

Беннингтон, в users / show.html.erb у вас есть

Но @microposts не определен в вашем контроллере.Я думаю, что вы хотите определить @microposts как все микросообщения, связанные с чем, пользователем?

Если так, вы бы хотели что-то вроде `@microposts = Micropost.where (: user_id => current_user.id) или что-то.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...