Возврат только новых элементов базы данных с момента последней проверки в Rails - PullRequest
0 голосов
/ 03 апреля 2010

Я довольно новичок в 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 при успешном сохранении?

Ответы [ 2 ]

1 голос
/ 03 апреля 2010

Вы должны использовать дистанционную форму рельсов.

Ссылка: - http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M001650

Когда вы отправляете форму, вы должны обновить div. здесь нет необходимости обновлять весь div. Например: -

def add_comment#this method should called using ajax
    @comment = Comment.new params[:comment]
    render :update do|page|
      if @comment.save
        page.insert_html :top, partial=>"latest_comment", :object=>@comment
      else
        page << "alert('UnSuccessfully commented.')"
      end
    end
end

_latest_comment.hrml.erb

<%= @comment.comment %>
0 голосов
/ 04 апреля 2010

в этом случае не требуется частичное, вы можете просто сделать:

page.insert_html :top, 'div_chat', @comment.comment

Хотя, я вижу некоторое использование частичного, если вы делали следующее:

views/comment/test_view.html.erb

<% @comments.each do |c| %><div id="comment"><br />
<%= render 'latest_comment', :comment => comment %><br />
</div>
<% end %>

Затем в page.insert_html вы можете отобразить частичный последний_комментарий и убедиться, что все комментарии отображаются одинаково.

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