Мне сказали переместить метод "Top" из контроллера в модель, но когда я пытаюсь вызвать его, он больше не работает.
Я использую Rails 6
Это мой контроллер:
class UsersController < ApplicationController
before_action :authenticate_user!
def index
@users = User.all
end
def show
@user = User.find(params[:id])
@posts = @user.posts.ordered_by_most_recent
end
def edit
@user = User.find(params[:id])
end
def following
@title = 'Following'
@user = User.find(params[:id])
@users = @user.following.paginate(page: params[:page])
render 'show_follow'
end
def followers
@title = 'Followers'
@user = User.find(params[:id])
@users = @user.followers.paginate(page: params[:page])
render 'show_follow'
end
def top
@userst = User.joins(:followers).order('COUNT(followings.follower_id) DESC').group('users.id').limit(10)
end
end
и это будет моя модель:
class User < ApplicationRecord
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, authentication_keys: [:username]
validates :fullname, presence: true, length: { maximum: 20 }
validates :username, presence: true, length: { maximum: 20 }
validates_uniqueness_of :username
has_many :posts
has_many :active_followings, class_name: 'Following',
foreign_key: 'follower_id',
dependent: :destroy
has_many :passive_followings, class_name: 'Following',
foreign_key: 'followed_id',
dependent: :destroy
has_many :following, through: :active_followings, source: :followed
has_many :followers, through: :passive_followings, source: :follower
mount_uploader :photo, FileUploader
mount_uploader :coverimage, FileUploader
# Follows a user.
def follow(other_user)
following << other_user
end
# Unfollows a user.
def unfollow(other_user)
following.delete(other_user)
end
# Returns true if the current user is following the other user.
def following?(other_user)
following.include?(other_user)
end
end
Весь код здесь имеет смысл для меня, поэтому мне нужно было только создать файл с именем top. html .erb вот так для рендеринга Top:
<article class="timeline new-initial">
<h3>Top:</h3>
<ul class="posts">
<%= render @userst %>
</ul>
</article>
Теперь, если честно, я заблудился, я не уверен, как правильно перенести этот метод в модель User для чтения это в разделе просмотра.