根据管理员是否在场重构 ruby 代码

Refactor ruby code based on the admin present or not

我想重构这段代码:

def self.find_posts(page, per_page, author_id, user)
  if user.admin?
    paginate(page: page, per_page: per_page)  #fetches on the basis of per_page
  else
    paginate(page: page, per_page: per_page).where(author: author_id) #Based on author_id
  end
end

Post.paginate(page: page, per_page: per_page)重复了两次所以我想删除它。

这是我尝试过的:

def self.find_posts(page, per_page, author_id, user)
  paginate(page: page, per_page: per_page)  #fetches the no of per_page
  if user.admin?
    #not getting what should I write here
  else
    where(author: author_id) #Based on author_id
  end
end

此代码也不起作用,我知道 paginate 不是最后一句话。我可以在那里使用 return 但不知何故我不明白该怎么做。

我不确定是否有必要重构它。但只是为了给你选择:

您可以这样做(或之前构建哈希)

paginate(page: page, per_page: per_page).where(user.admin? ? {} : {author: author_id})

或将默认范围添加到您的 post

我会写:

def self.find_posts(page, per_page, author_id, user)
  posts = user.admin? ? Post.all : Post.where(author: author_id) 
  posts.paginate(page: page, per_page: per_page)
end