2017-04-03 60 views
0

在我的Rails應用程序用戶能夠編寫和發佈帖子。 在主頁上,我想特寫幾個帖子。選擇內容到功能

這是我用什麼來選擇此刻帖子:

posts_controller.rb

favorite_post_ids = [8,2,5] 
@favorite_posts = Post.find(favorite_post_ids) 
new_post_ids = [1,2,5] 
@new_posts = Post.find(new_post_ids) 

,然後在視圖我遍歷他們顯示的職位。

但是,一旦一個帖子被刪除,控制器無法再找到它,我得到的是說

Couldn't find all Posts with 'id': (1, 2, 5) (found 2 results, but was looking for 3) 

什麼是更好的方式來做到這一點的錯誤?我正在考慮單個表格,一個用於new_posts,另一個用於favorite_posts,然後與帖子建立關係。在表中,我將有post_id引用。

UPDATE:

我加了一堆額外列的不同類型的特色內容全部用布爾值默認爲false的職位。如果我想要他們的特色,我將分配給你。

+0

你能否告訴我們,什麼是最喜歡的帖子的標準是什麼? –

回答

2

你會如何解決這個問題?

讓您的文章標記爲favorite布爾類型。然後,你會選擇它們是這樣的:

@favorite_posts = Post.where(favorite: true).limit(3) 

而對於新的職位,您可以使用時間戳

@new_posts = Post.order(created_at: :desc).limit(3) 

看,沒有硬編碼!

+0

嗨,謝謝你。但我正在專門尋找通過ID選擇他們。因爲如果我創建一個收藏夾列來接受布爾值,我也必須爲其他類型的特色內容創建列。例如,如果我在posts表中有「精選」和「推薦」列,只需要選擇幾個,我擔心大多數帖子會將這些列設置爲false。 – Joshua

+0

@Joshua:「我擔心的是,大多數帖子會將這些列設置爲false」 - 這本身並不是問題。你真正的擔憂是什麼? –

+0

@Joshua:將元數據存儲在其他表格中(「它是否具有特色?是否用於此新廣告系列?」等)也是一種可行的替代方案。但它會產生自己的代價(更復雜的代碼,更復雜的數據庫結構,更復雜的查詢)。優點和缺點需要評估。 –

0

我不鼓勵硬編碼。但還是如果這是你的要求,儘量

favorite_post_ids = [8,2,5] 
@favorite_posts = Post.where(:id => favorite_post_ids) 
new_post_ids = [1,2,5] 
@new_posts = Post.where(:id => new_post_ids)