当有人在我的Rails应用中查看特定文章时,我正在尝试添加其他一些近期文章。
我的控制器中有以下方法:
def show
@article = Article.find(params[:id])
@recents = Article.where(!@article).order("created_at DESC").limit(4).offset(1)
end
专家眼睛可能会看到,@ letcents不正确。这是我最好的猜测。 :)
如何显示最近的一些文章,但不重复他们目前正在查看的文章?
答案 0 :(得分:2)
您应该在模型中使用范围,因为它有很多优点。了解范围here。你的情况应该是这样的:
在模型中:
class Article < ActiveRecord::Base
scope :recent, ->(article_id) { where.not(id: article_id).order(created_at: :desc).limit(4) }
end
并在控制器中:
def show
@article = Article.find(params[:id])
@recent = Article.recent(@article.id)
end
这样,最近的范围将总是得到最后四篇文章,将您作为参数传递的文章排除在外。范围是可链接的,所以你也可以做这样的事情:
def some_action
@user = User.find(params[:user_id])
@user_recent_articles = @user.articles.recent(0)
end
您正在获取用户最近的文章。我传递零,因为范围要求参数。如果你想以最干净的方式做到这一点,你可以创建一个不同的范围。 这个,假设用户有很多文章。
嗯,希望它有所帮助!
答案 1 :(得分:1)
尝试使用@recents = Article.where.not(id: @article.id).order("created_at DESC").limit(4)
答案 2 :(得分:0)
click here - 第2.4节:)。 我认为有一种方法只能拨打一个电话,而不是现在的方式。