2013-01-02 18 views
5

私は自分のアプリにチャットシステムを実装していました。コメントのリストだけがajax submitでリロードされます。カミナリページネーションが生成するURLを修正する方法はありますか?

カミナリページネーションがそこで使われていますが、新しいコメントが投稿された後、このようにURLに変わった文字列が得られます。

example-website.com/users/mike/refresh_part?_=1356906069855 &ページ= 2

とコメントが他に提出されたときには、そのURL内のより多くの奇妙な引数パラメータを取得しますコントローラ。 &コメントをexample-website.com/shop/walmart/topic/20/comments?authenticity_token=9nUyEQ%2Fa0F114vUe16RXf7jhsPw%2B736E%2BKyZFjiWbkQ%3D

:それは、スパムエラー 生成されたURLでmacthedた場合にのみ、 [ボディ] =テスト&はコミット= 2 &

がどのように私はこの問題を解決することができ✓= UTF8 =コメント+ &ページを作成しますか?

私のコードがある

ビュー/ユーザー/ show.html.erb

<%= javascript_tag do %> 
    jQuery(document).ready(function() { 
     refreshPartial(); 
     setInterval(refreshPartial, 5000) 
    }); 


    function refreshPartial() { 
     $.ajax({ 
     url: "<%= show_user_path(@user) %>/refresh_part", 
     type: "GET", 
     dataType: "script", 
     }); 
    } 
<% end %> 
...... 
<span id="chat"> 
<%= render 'users/comment' %> 
</span> 
<%= render 'users/comment_input' %> 

ビュー/ユーザー/ _comment.html.erb

<table> 
    <tr> 
    <th>ID</th> 
    <th>PIC</th> 
    <th>Body</th> 
    <th>Subject</th> 
    <th>Posted by</th> 
    <th>Delete</th> 
    </tr> 

<% @comments.each do |comment| %> 
    <tr id="<%= dom_id(comment) %>"> 
    <td><%= comment.id %></td> 
    <td> 
      <% if comment.comment_icon? %> 
       <ul class="thumbnails"> 
       <%= image_tag(comment.comment_icon.url(:thumb),:height => 100, :width => 100, :style => 'border:3px double #545565;') %> 
       </ul> 
      <% end %> 

    </td> 
    <td><%= comment.body %></td> 
    <td><%= comment.subject %></td> 
    <td><%= comment.user.user_profile.nickname if comment.user.user_profile %></td> 
    <td> 
    <%= button_to 'destroy', polymorphic_path([@user, comment]), :data => {:confirm => 'Are you sure?'}, :method => :delete, :disable_with => 'deleting...', :remote => true, :class => 'btn btn-danger' if current_user && current_user.id == comment.user_id %> 
    </td> 
    </tr> 
<% end %> 
</table> 

<%= paginate @comments, :window => 4, :outer_window => 5, :left => 2, :right => 2 %> 

views/users/_comment_input.html.erb< =これは入力フォームです!!!!!

<%=form_for(([@user, @comment]), :remote => true) do |f| %> 
    <div class="field"> 
     <%= f.label :body %><br /> 
     <%= f.text_field :body %> 
    </div> 
    <div class="field"> 
    <%= f.file_field :comment_icon %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 

<% end %> 

comments_controller.rb

def create 
    commentable = @community_topic||@community||@user 
    @comments = commentable.comment_threads.order("updated_at DESC").page(params[:page]).per(5) 
    @comment = Comment.build_from(commentable, current_user.try(:id), params[:comment][:body]) 
    @comment.comment_icon = params[:comment][:comment_icon] 


    if @user 
    @following_users = @user.all_following(order: 'updated_at DESC') 
    @followed_users = @user.followers 
    @communities_user = @user.get_up_voted(Community).order("updated_at ASC").page(params[:page]).per(5) 
    elsif @community  

    end 

    last_comment = Comment.where(:user_id => current_user.id).order("updated_at").last 

    if last_comment && (Time.now - last_comment.updated_at) <= 10.second 
    flash[:notice] = "You cannot spam!" 
    render :template => template_for(commentable) 
    elsif @comment.save 
    #if @community_topic.empty? 
     @comments = commentable.comment_threads.order("updated_at DESC").page(params[:page]).per(5) 
     @comment = commentable.comment_threads.build 

     respond_to do |format| 
      format.html { redirect_to [@community, commentable].uniq, :notice => "comment added!" } 
      format.js do 
       if @community.present? 
        render 'communities/refresh_part' 
       elsif @community_topic.present? 
        render 'community_topics/refresh_part' 
       elsif @user.present? 
        render 'users/refresh_part' 
       end 
      end 
     end 
    else 
    render :template => template_for(commentable) 
    end 
end 

ビュー/ユーザー/ refresh_part.js.erb

$('#chat').html("<%= j(render(:partial => 'users/comment')) %>") 

答えて

13

これは雷の既知の問題です。参照:Issue #132,Issue #182

現在既知の回避策は、例えば、改ページヘルパー上のparamsを手動で設定することです:

paginate @comments, :params => { :controller => 'comments', :action => 'index', _: nil, _method: nil, authenticity_token: nil, utf8: nil} 

あなたはあなたの状況に合わせてそのコードを調整する必要があること、および他のすべての機能をテストしてくださいよすべてのパラメータを手動で設定しているときに期待どおりに動作します。

URLにタイムスタンプの問題が特に発生しているので、問題132にコメントし、そこにあなたの経験の詳細を投稿する必要があります。 githubに参加すればするほど、あなた、プロジェクトのユーザー、および保守担当者がより良い解決策を見つけることができるようになります。

+0

ありがとうございました:)私はあなたの提案を試みました。なぜなら、私はこれを追加しました** <%=ページ区切りat_comments、:window => 4、:outer_window => 5、:left => 2、 :== 2、:params => {:コントローラ=> 'コミュニティ'、:アクション=> 'show'、_:nil、_method:nil、authenticity_token:nil、utf8:nil}%** ** – MKK

+0

まあ、 ':remote => true'を' paginate'の引数のリストに戻すだけです。 – Andrew

+0

ありがとうございます:) – MKK

関連する問題