我很确定这是一个简单的解决方案,但我没有看到它。我有一个应用程序,我想显示music_videos评论。以下是我的控制器:
def show
@music_video = MusicVideo.find(params[:id])
@comment = Comment.new
@comments = @music_video.comments.page(params[:page]).per(3)
end
以上是我的音乐视频控制器。
def create
@music_video = MusicVideo.find(params[:music_video_id])
@comment = @music_video.comments.build(comment_params)
if @comment.save
flash[:notice] = "Comment Submitted"
redirect_to music_video_path(@music_video)
else
render 'music_videos/show'
end
end
def destroy
@comment = Comment.find(params[:id])
@comment.destroy
redirect_to root_path, notice: "Comment Deleted"
end
private
def comment_params
params.require(:comment).permit(:body)
end
以上是我的评论控制器
最后我的展示页面:
<div class="comments_row">
<% @music_video.comments.each do |comment| %>
<% if user_signed_in? && current_user.admin? %>
<p class="comment"><%= comment.body %></p>
<%= link_to 'Delete Comment', music_video_comment_path(@music_video,comment),
method: :delete %>
<% else %>
<p class="comment"><%= comment.body %></p>
<% end %>
<%end%>
</div>
<%= paginate @comments %>
我很确定我的控制器出了问题,但我不确定它究竟是什么。 @comments在正确的CRUD操作(show)中位于正确的控制器(MusicVideo)中。目前我在一个特定的节目页面中有六条评论,并且分页显示很好但是六条评论没有分页。有什么想法吗?
EDIT -------------
我找到了一个问题,但偶然发现了一个问题。我发现在我的控制器中我宣布@comments =分页等等。在我的视图中没有@comments分页。现在的问题是当我使用
时<%= paginate @comment %>
代码将破坏。我现在遇到的问题是分页的变量。尝试此代码也会破坏
<%= paginate @music_video.comments %>
有什么建议吗?
答案 0 :(得分:2)
我使用kaminari gem设置了一个测试应用程序进行分页。这就是我的音乐视频控制器的动作效果:
def show
@music_video = MusicVideo.find(params[:id])
@comments = @music_video.comments.page(params[:page]).per(3)
end
以下是我的节目视图:
<p id="notice"><%= notice %></p>
<p>
<strong>Name:</strong> <%= @music_video.name %>
</p>
<% @comments.each do |comment| %>
<p>
Comment: <%= comment.text %>
</p>
<% end %>
<%= paginate @comments %>
<%= link_to 'Edit', edit_music_video_path(@music_video) %> |
<%= link_to 'Back', music_videos_path %>
它正在发挥作用,并且为我出现了分页。
我认为我直接看到的一件事是您应该使用<% @comments.each do |comment| %>
代替<% @music_video.comments.each do |comment| %>
,因为现在它的方式会显示视频的所有评论,无论您使用的是哪个页面。如果您有6条评论并且每页需要3条评论,那么您会看到这两页的分页,因为您正在根据@comments
运行您的分页,并且您最终会在这两个页面上看到所有6条评论,因为您和#39;用.each
重新做@music_videos.comments.each
。
所以,至少在两个地方使用@comments
都是一个开始。并确保您使用<%= paginate @comments %>
进行分页。如果你在控制器中使用它并查看你得到了什么?你看到有什么意见吗?
此外,Ryan Bates也有关于Kaminari的精彩截屏:http://railscasts.com/episodes/254-pagination-with-kaminari(该网站是铁路问题的绝佳资源)