0

ユーザーがプロジェクトを作成し、これらのプロジェクトにコメントできるアプリケーションを作成しました。現在、各プロジェクト ページにユーザーがコメントできるようになっています。

質問: 以下のコードに基づいて、will_paginate を使用できますか? 私は宝石をインストールしています。もしそうなら、以下のコードにどのように統合しますか? そうでない場合、ページネーションを組み込むために何をする必要がありますか?

コメント.rb

class Comment < ActiveRecord::Base
  attr_accessible :content, :project_id, :user_id
  validates :content, presence: true

  belongs_to :project
  belongs_to :user

  scope :newest, order("created_at desc")
end

コメント_コントローラー.rb

class CommentsController < ApplicationController
  before_filter :authenticate_user! 

  def create
    project = Project.find(params[:project_id])
    @comment = project.comments.create!(params[:comment])
    redirect_to project_path(project)
  end
end

プロジェクト/show.html.erb

        <!-- Add Comments -->

          <% if signed_in? %>
            <p class="comment_header">Add Comment:</p>

            <span class="comment">
                <%= form_for([@project, @project.comments.build]) do |f| %>
                  <div class="field">
                    <%= f.text_area :content, :class => "span7", :rows => "3" %>
                  </div>

                  <%= f.hidden_field :user_id, :value => current_user.id %>

                  <div class="actions">
                    <%= f.submit "Add Comment", :class => "btn btn-header" %>
                  </div>
                <% end %>
            </span>

          <% else %>

            <p class="comment_header"><%= link_to 'Sign in', new_user_session_path %> to post comments.</p> 

          <% end %>

          <!-- Show Comments -->
          <p class="comment_header">Comments:</p>

          <% if @project.comments.blank? %>     
            <p>No comments made yet for this project.</p>        
          <% else %>        
            <% @project.comments.newest.each do |comment| %>   
              <div class="comments">        
                <p><%= comment.content %></p>
                <span>By <%= link_to comment.user.name, comment.user %> <%= time_ago_in_words(comment.created_at) %> ago</span>
              </div>
            <% end %>       
          <% end %>
          <!-- end of comments section -->
4

4 に答える 4

2

はい、will_paginate gem を使用できます。このgemは、ページ番号で行数を取得するためのもので、ページごとの要素数を指定できます。たとえば、ページ 1 は要素 1 から 30 ページ 2 31 から 60 を提供します ....ビューを実装する必要がある後

于 2013-04-23T08:30:09.527 に答える
0

リダイレクトする前に paginate メソッドを呼び出すことができます

あなたのコントローラーで

  @comments = @project.comments.pagenate(page: params[:page]||1,per_page: 20)

テンプレートに以下を追加します

  <%= will_paginate @comments %>
于 2013-04-23T08:47:13.023 に答える
0

will_paginateあなたは正しく実装していません。(適切な実装については、こちらのドキュメントを参照してください。 )

簡単に言えば@comments = @project.comments.paginate(page: params[:page])、コントローラーで index アクションのようなものを使用してから、 を反復処理する必要があります@comments。その後、will_paginate @comments正しく動作するはずです。

メソッドは、通常の ActiveRecord クエリとは異なり、ページネーションを処理する特別なオブジェクトを返すwill_paginate @user.comments.newestため、ビューでクエリ ( ) を実行することはできません。paginate

于 2013-04-23T08:48:56.060 に答える