對不起,標題很混亂,但我會在這裏詳細說明。有沒有一種方法可以使用rake任務或方法來重寫使用erb的HTML部分?
好的我的網站的用戶索引頁面我有一個熱門歌曲列表。該列表按用戶排名排序,並且該列表隨着每首歌曲聚合排名相對於彼此而改變而動態變化。
class SongratingsController < ApplicationController
@Top100 = Rails.cache.read('Top100')
lastSpot = @Top100.last
def reCalcTop100
@Top100 = Song.where('num_stars > ?', 0).order('num_stars desc, total_score desc').limit(100)
Rails.cache.fetch('Top100'){@Top100}
end
def addRatingToSong
userID = params[:uid].to_i
songId = params[:sid].to_i
rVal = params[:valR].to_i
@averageS = []
songRate = Songrating.find_by(:user_id => userID, :song_id => songId)
if songRate != nil
oldScore = songRate.rating
songRate.update_attributes(:rating => rVal)
@song = Song.find(songId)
score = @song.total_score - oldScore
newScore = score + rVal
averageScore = newScore/@song.songratings_count
@song.update_attributes(:total_score => newScore,:num_stars => averageScore)
@averageS[0] = averageScore
@averageS[1] = @song.songratings_count
else
Songrating.create!(:user_id => userID, :song_id => songId,:rating => rVal)
@song = Song.find(songId)
newScore = @song.total_score + rVal
averageScore = newScore/@song.songratings_count
@song.update_attributes(:total_score => newScore,:num_stars => averageScore)
@averageS[0] = averageScore
@averageS[1] = @song.songratings_count
end
if newScore > lastSpot.total_score && averageScore > lastSpot.num_stars
reCalcTop100
end
if request.xhr?
render :json => {
:starData => @averageS
}
end
end
末
正如你可以在這兩張照片見下面我有一個局部視圖,顯示這個名單,但現在我有列表每次生成的用戶登錄到主頁。但是因爲這個列表並不是用戶唯一的,所以我覺得我正在浪費時間來重新生成這個列表。
理想我想生成和寫一個靜態的HTML部分僅在TOP100排行榜的變化,但我真的不知道如何做到這一點。
謝謝。
所以我可以緩存HTML文件或只是數據,因爲我已經緩存了Top100查詢結果,並且使用了一個幫助器方法,它從緩存中的100列表中返回前10個對象的實例變量。 [緩存初始化工具](https://github.com/MKwenhua/myOtherCv/blob/master/config/initializers/queryDB.rb),[helper method getTop100 line48](https://github.com/MKwenhua/myOtherCv/blob /master/app/helpers/users_helper.rb),[這是erb視圖部分](https://github.com/MKwenhua/myOtherCv/blob/master/app/views/users/_topmusiclabel.html.erb) – Pete