所以我在我的Articles表中有2個字段。Rails根據其他兩個字段更新數據庫字段
- :vote_up
- :vote_down
我在我的應用程序更新:vote_up和:vote_down字段,工作正常的方法。我想要做的是以總票數(:vote_up minus:vote_down)來訂購我的文章。
這樣做的最好方法是什麼?我可以直接在控制器中用某種方法做到這一點嗎?或者我必須創建一個:vote_total字段,根據其他兩個字段的值自動更新(如果是這樣的話)。
非常感謝!
所以我在我的Articles表中有2個字段。Rails根據其他兩個字段更新數據庫字段
- :vote_up
- :vote_down
我在我的應用程序更新:vote_up和:vote_down字段,工作正常的方法。我想要做的是以總票數(:vote_up minus:vote_down)來訂購我的文章。
這樣做的最好方法是什麼?我可以直接在控制器中用某種方法做到這一點嗎?或者我必須創建一個:vote_total字段,根據其他兩個字段的值自動更新(如果是這樣的話)。
非常感謝!
不要在您的控制器中執行此操作。這意味着要在你的模型中完成。控制器應該只使用模型。
您可以通過兩種方式做到這一點:
解決方案1
在控制檯試試這個(護欄C)
Article
.unscoped
.select(%q(articles.*, (articles.vote_up - articles.vote_down) AS vote_total))
.order(%q(vote_total DESC))
,並在您Article
的實現它的範圍類
scope :order_by_total_votes, -> {
select(%q(articles.*, (articles.vote_up - articles.vote_down) AS vote_total))
.order(%q(vote_total DESC))
}
解決方案2
創建一個域vote_total
您Article
每表決場被更新(使用before_save
回調)的一次更新。然後,您可以執行與解決方案1中相同的操作,但不包含select
部分。
建議
我會去與解決方案2,因爲在其他之中它是在查詢速度更快
希望這有助於。
感謝@Hiasinho爲你的方向。我結束了剛剛創建:vote_total我的文章的數據庫,並更新其對我的兩個給予好評和downvote方法,像這樣
@article.update_attributes(vote_total: @article.vote_total + 1)
顯然,這是爲downvotes -1。
嘿,爲此想。我最終做了解決方案2,但略有不同。已在下面發佈我的工作答案 – MikeHolford