2014-01-24 60 views
0

我想包括一些其他最近的文章,當有人在我的Rails應用程序中查看特定的文章。包括顯示方法中的最近記錄列表

我在我的控制器下面的方法:

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

由於專家的眼睛可能會看到,@recents是不正確的。這是我最好的猜測。 :)

如何顯示最近的一些文章,但不重複他們目前正在查看的文章?

回答

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 

您正在獲取用戶最近的文章。我通過了一個零,因爲範圍要求參數。如果你想以最乾淨的方式做到這一點,你可以創建一個不同的範圍。 這,假設用戶has_many文章。

那麼,希望它有幫助!

1

嘗試@recents = Article.where.not(id: @article.id).order("created_at DESC").limit(4)

0

click here - 第2.4節:)。 我認爲有一種方法只能打一個電話而不是2個電話。