[英]How Do I Store A Calculated Value In Rails
我正在一個項目中,希望始終顯示反饋最少的帖子(目的是鼓勵對正在進行的作品進行反饋)。 我已經找到了計算方法-盡管歡迎反饋-但是,我在將此值分配給Post模型上的列( :feedback_score
)時遇到麻煩。 我需要幫助。
post.rb:
class Post < ActiveRecord::Base
def feedback_score_calc
time_passed = ((Time.now - self.created_at)/1.hour).round(3)
feedback = self.comments.count
self.feedback_score = time_passed / feedback
end
end
我需要知道每當添加新注釋時如何調用此方法,並且還需要能夠按某種時間表進行計算。 我的目標是顯示首次訪問時參與度最低的用戶,並進行分頁,以顯示第2位到參與度最低的用戶,第3位,等等。
我的另一個問題是,即使使用def self.feedback_score_calc
,我也無法通過控制台運行此方法,也沒有方法錯誤。
對於您提供的代碼,它是Post
上的實例方法。 你應該能夠做類似的事情
@post = Post.find(some_id_here)
@post.feedback_score_calc
將其創建為具有def self.feedback_score_calc
定義的類方法不是您想要執行的操作,因為您要在Post
的特定實例及其關系上進行計算。
正如@Kien Thanh在評論中提到的那樣,如果要查看列值反映在數據庫中,則需要在設置列值后調用Post
實例上的save
。
@post = Post.find(some_id_here)
@post.feedback_score_calc
@post.save
或方法本身
def feedback_score_calc
time_passed = ((Time.now - self.created_at)/1.hour).round(3)
feedback = self.comments.count
self.feedback_score = time_passed / feedback
save
end
還值得一提的是,您可以像這樣調用write_attribute
來直接寫一個列(繞過ActiveRecord設置的feedback_score=
方法)
def feedback_score_calc
time_passed = ((Time.now - self.created_at)/1.hour).round(3)
feedback = self.comments.count
write_attribute(:feedback_score, time_passed / feedback)
save
end
最后,您需要殺死並重新啟動控制台或運行reload!
當您嘗試從控制台內部對模型進行更改時,請從控制台內部進行更改。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.