嵌套属性分页错误(kaminari)

时间:2014-04-28 18:18:22

标签: ruby-on-rails pagination kaminari

我很确定这是一个简单的解决方案,但我没有看到它。我有一个应用程序,我想显示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 %> 

有什么建议吗?

1 个答案:

答案 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(该网站是铁路问题的绝佳资源)