在show方法中包含最近记录的列表

时间:2014-01-24 20:26:27

标签: ruby-on-rails

当有人在我的Rails应用中查看特定文章时,我正在尝试添加其他一些近期文章。

我的控制器中有以下方法:

def show
  @article = Article.find(params[:id])
  @recents = Article.where(!@article).order("created_at DESC").limit(4).offset(1)
end

专家眼睛可能会看到,@ letcents不正确。这是我最好的猜测。 :)

如何显示最近的一些文章,但不重复他们目前正在查看的文章?

3 个答案:

答案 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节:)。 我认为有一种方法只能拨打一个电话,而不是现在的方式。