2014-01-30 68 views
0

我有兩種型號profilereview。我在profile模型中添加了分數列。以下代碼正在計算和更新score,但我已有1000個配置文件已在數據庫中,我不知道如何更新現有配置文件的分數。如何更新導軌中的現有配置文件4

非常感謝您的幫助。

Profile.rb

class Profile < ActiveRecord::Base 
    # :phone 
    # :slogan 
    # :description 
    # :score 

    has_many :reviews 
    before_save :update_score 
    private 
     def update_score 
     self.score += 1 if changes['phone'] && changes['phone'].first.nil? 
     self.score += 1 if changes['slogan'] && changes['slogan'].first.nil? 
     self.score += 1 if changes['description'] && changes['description'].first.nil? 
     end 
end 

Review.rb

class Review < ActiveRecord::Base 
    belongs_to :profile 

    # :body 
    after_save :update_profile_score 
    private 
    def update_profile_score 
     self.profile.score += 1 
     self.profile.save 
    end 
end 

回答

1

並不是簡單像這樣在rails console工作?

Review.all.each{|r| r.save} 
Profile.all.each{|p| p.save} 

的事情是,你的代碼好好嘗試一下做一個很大的意義......你想要的每一次審查保存更新簡檔分數?這意味着每次有人更新評論時,個人資料得分都會提高?這看起來不對。

另外update_score在配置文件看起來很奇怪,doens't很有意義。

這將是更好,如果你解釋你想要計算什麼分數和它取決於什麼,我有一種感覺真正的解決方案將是完全不同的。

+0

我試着在控制檯,但它沒有工作順便說一句,實際上用戶不能更新'審查'這就是爲什麼我保持這種方式。 – Murtza

+0

解釋「沒有工作」。也許你忘了選擇正確的環境(例如'rails console production')。但回答關於你想要做什麼的問題請:)在控制檯中的 – Silex

+0

'Review.all.each {| r | r.save}'正在更新分數,但'Profile.all.each {| p | p.save}'不會更新分數。我認爲'update_score'方法 – Murtza