

**やりたいこと**  
自作アプリ内で，以下のeach文を使って投稿を表示しているのですが，仮にですが表示上限を10個までとしたいです．  
その際に，古いものから消えていくような仕様にしたいです．

[code]

    <% @notifications.each do |notification| %>
      <div class="notifications-index-item">
      <% case notification.action %>
      <% when "post" %>
        <%= link_to(notification.post.dear, "/posts/#{notification.post.id}") %> <br>
      <% when "reply" %>
        <%= link_to(notification.reply.dear, "/replies/#{notification.reply.id}") %> <br>
      <% else %>
        <p>まだ来ていません</p>
      <% end %>
      </div>
    <% end %>
    
[/code]

今のままだと，おそらく無制限に投稿が表示されてしまうので，どなたかに教えていただきたいです．

**追記**

**notification.rb**

[code]

    class Notification < ApplicationRecord
    
      default_scope -> { order(created_at: :desc).limit(10) }
      belongs_to :post, optional: true
      belongs_to :reply, optional: true
    
      belongs_to :visitor, class_name: 'User', foreign_key: 'visitor_id', optional: true
      belongs_to :visited, class_name: 'User', foreign_key: 'visited_id', optional: true
    
    end
    
[/code]

**notifications_controller.rb**

[code]

    class NotificationsController < ApplicationController
      def index
        @notifications=current_user.passive_notifications
        #@notifications.where(checked: false).each do |notification|
          #notification.update_attribute(:checked, "true")
        #end
      end
    end
    
    
[/code]

**User.rb** made by devise

[code]

    class User < ApplicationRecord
      # Include default devise modules. Others available are:
      # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
      devise :database_authenticatable, :registerable,
            :recoverable, :rememberable, :validatable,
            :confirmable, :lockable, :timeoutable, :trackable
    
      attribute :received_at, :datetime, default: -> { Time.now }
    
      has_many :posts, dependent: :destroy
    
      validates :name, presence: true
      validates :birthday, presence: true
      validates :received_at, presence: true
    
    
      #アクティブで自分からの通知パッシブは他人から
      has_many :active_notifications, class_name: "Notification", foreign_key: "visitor_id", dependent: :destroy
      has_many :passive_notifications, class_name: "Notification", foreign_key: "visited_id", dependent: :destroy
    end
    
[/code]

**参考にしたもの**  
[【Rails】通知機能を誰でも実装できるように解説する【いいね、コメント、フォロー】](https://qiita.com/nekojoker/items/80448944ec9aaae48d0a)


CC BY-SA 4.0
2022-11-03T11:29:42.273
91968
2022-11-06T07:47:32.800
2022-11-06T07:47:32.800
40091
40091
question
ruby-on-rails ruby
Railsのeach文で作ったものの表示上限を決めたいです


`@notifications` がナニモノかに依りますが:

  * 配列の場合  
`@notifications.sort_by(&:ソートしたい日時項目).reverse.take(10).each do...`  
の様に並び換えた上で [`Array#take`](https://docs.ruby-
lang.org/ja/latest/class/Array.html#I_TAKE) を使えば良いと思います。  
並び換えは `sort_by {...}.reverse` ではなく `sort {|a, b| b.日時項目 <=> a.日時項目 }`
としても良いでしょう。  
既に並び順が新しいものが先頭となるようになっていれば、take だけ追加すれば良いと思います。

  * AcitveRecord モデルのクエリ結果の場合  
クエリに `order(ソートしたい日時属性: :desc).limit(10)` を追加すれば良いと思います。  
すでに order をつけているのであれば、limit だけ追加すれば良いと思います。


CC BY-SA 4.0
2022-11-03T14:07:13.020
91973
2022-11-03T14:07:13.020
54859
91968
answer