2013-01-02 35 views
5

Uygulamam için bir sohbet sistemi uyguluyordum. Bu uygulamada yalnızca yorumların listesi ajax gönderilerek yeniden yüklenecek.Kaminari sayfalamalarının ürettiği url'yi düzeltmenin herhangi bir yolu var mı?

Kaminari sayfalandırma orada kullanılır, ancak yeni açıklama göndermek sonra böyle kendi url garip dize alır.

example-website.com/users/mike/refresh_part?_=1356906069855 & page = 2

ve yorum diğerinde teslim edildiğinde onun url daha garip argüman parametrelerini alır kontrol ünitesi. o spam hatası Oluşturulan url birbirleriyle eşleştirilmiştir edildi Yalnızca:

& yorumunu example-website.com/shop/walmart/topic/20/comments?authenticity_token=9nUyEQ%2Fa0F114vUe16RXf7jhsPw%2B736E%2BKyZFjiWbkQ%3D [body] = test & işlemeye = 2 &

nasıl düzeltebilirim ✓ = utf8 = Comment + & sayfa oluşturun?

Benim kodlardır

görüntüleme/kullanıcılar/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' %> 

görüntüleme/kullanıcılar/_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 %> 

görüntüleme/kullanıcı/_comment_input.html.erb< = Bu giriş formu !!!!!

<%=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 

görüntüleme/kullanıcılar/refresh_part.js.erb

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

cevap

13

Bu Kaminari ile bilinen bir sorundur. Bakınız: Issue #132, Issue #182.

bilinen bir çözüm elle örneğin sayfalama yardımcı üzerindeki params ayarlamaktır:

paginate @comments, :params => { :controller => 'comments', :action => 'index', _: nil, _method: nil, authenticity_token: nil, utf8: nil} 
durumunuza uygun ve diğer tüm işlevselliği test etmek için emin olmak için bu kodu ayarlamak gerekecek

Tüm paramları manuel olarak ayarladığınızda beklendiği gibi çalışır.

Özellikle URL'de zaman damgalarıyla ilgili bir sorunla karşılaştığınız için Sorun 132 hakkında yorum yapmalı ve deneyiminizin ayrıntılarını burada paylaşmalısınız. Github sorunlarına ne kadar çok katılırsanız, proje kullanıcıları ve geliştiriciler daha iyi bir çözüm bulabilirler.

+0

Çok teşekkürler :) Önerinizi denedim. Ama öyle görünüyor ki disable ** uzaktan => true ** :(nedenini anlatabilir misin? ** Bunu ekledim ** <% = paginate at_comments,: window => 4,: outer_window => 5,: left => 2, : right => 2,: params => {: controller => 'topluluklar',: action => 'show', _: nil, _method: nil, authenticity_token: nil, utf8: nil}%> ** – MKK

+0

Peki, sadece "paginate" argüman listenizde '' remote => true' yazmanız yeterlidir. – Andrew

+0

Teşekkürler çok :) – MKK

İlgili konular