点击loadmore div时,我正在尝试加载更多评论。当我点击Loadmore时,这段代码呈现的是我最初渲染的相同值。例如,如果我最初渲染10条评论,当我点击加载更多时,它会渲染相同的10条评论。
在index.html.erb
中<div class="main-content"><%= render :partial => 'comment' %></div>
<div class="loadmore" onclick="send()">Loadmore</div>
在_comment.html.erb
中 <% @comments.each do |comment| %>
<%= comment.comments %>
<%= end %>
在我的控制器中
@comments = Comment.paginate(:per_page => 10, :page => params[:page]).all(:order => 'updated_at DESC')
respond_to do |format|
format.html # index.html.erb
format.json { render json: @comments }
end
在javascript中
function send(){
$.ajax({
url: '<%= escape_javascript comments_path(:page =>(@comments.current_page)+1) %>',
type: 'GET',
dataType: 'json',
success: function(){
$(".main-content").append("<%= escape_javascript render :partial => 'comment' %>");
}
});
}
如果代码错误,建议我使用正确的代码。
答案 0 :(得分:0)
每次点击按钮时,params[:page]
都不会更新,您需要在每次传递params[:page]
之前重新设置offset
值来重置{{1}}
答案 1 :(得分:0)
我想你可以在你的观点中尝试这个:
<div class="main-content"><%= render :partial => 'comment' %></div>
<div class="loadmore" onclick="send()" id="loadmore_button" data-page="2">Loadmore</div>
之后在javascript中你需要获取当前页面,并将旧值更新为新页面数据
function send(){
var pager = $("#loadmore_button").data("page")
$.ajax({
url: '<%= escape_javascript comments_path %>?page='+pager,
type: 'GET',
dataType: 'json',
success: function(){
$(".main-content").append("<%= escape_javascript render :partial => 'comment' %>");
$("#loadmore_button").data("page", parseInt(pager)+1)
}
});
}