Я довольно новичок в Ruby и сейчас пытаюсь реализовать систему комментирования в стиле AJAX.
Когда пользователь просматривает тему, отображаются все текущие комментарии по этой теме.
Пользователь может оставить комментарий на странице темы, и он должен автоматически отображаться без обновления страницы вместе с любыми новыми комментариями, которые были опубликованы с момента последнего комментария, отображаемого в данный момент для пользователя.
Комментарии также должны автоматически обновляться с указанной периодичностью.
В настоящее время у меня есть следующий код:
Вид / идея / view.html.erb
<%= periodically_call_remote(:update => "div_chat", :frequency => 1, :position => "top", :url => {:controller => "comment", :action => :test_view, :idea_id => @idea.id } ) %>
<div id="div_chat">
</div>
просмотров / комментарий / test_view.html.erb
<% @comments.each do |c| %><div id="comment">
<%= c.comment %>
</div>
<% end %>
Контроллеры / comment_controller.rb
class CommentController < ApplicationController
before_filter :start_defs
def add_comment
@comment = Comment.new params[:comment]
if @comment.save
flash[:notice] = "Successfully commented."
else
flash[:notice] = "UnSuccessfully commented."
end
end
def test_render
@comments = Comment.find_all_by_idea_id(params[:idea_id], :order => "created_at DESC", :conditions => ["created_at > ?", @latest_time] )
@latest = Comment.find(:first, :order => "created_at DESC")
@latest_time = @latest.created_at
end
def start_defs
@latest = Comment.find(:first, :order => "created_at ASC")
@latest_time = @latest.created_at
end
end
Проблема заключается в том, что каждый раз, когда periodically_call_remote выполняет вызов, он возвращает полный список комментариев по этой теме. Из того, что я могу сказать, @latest_time постоянно сбрасывается до самого раннего созданного_атта, а не остается обновленным до самого последнего созданного_тата после получения комментариев.
Я также не уверен, как мне непосредственно обновлять комментарии при публикации комментария. Можно ли принудительно вызвать periodical_call_remote при успешном сохранении?