我有一个应用程序,该应用程序呈现一个内部具有链接的div,该应用程序使用AJAX更新了该div的外观。问题在于,Rails必须在切换视图时一遍又一遍地请求相同的数据,这似乎效率很低。
在阅读了控制器动作之间共享变量的主题之后,我了解到由于无状态的性质,这是不可能的。还已经阅读了会话不应该用于存储对象,并且这些变量包含大量数据,主要用于生成图形。我猜另一个选择是缓存,我不太熟悉。或者可以在浏览器中的Javascript中保存变量。
有人有类似的问题可以提供一些指导吗?
class ArtistsController < ApplicationController
def index
if params[:term]
respond_to do |format|
format.html
format.js {render "show.js.haml"}
end
else
@artists= Artist.all
end
end
def show
@days=90
# DATABASE QUERIES
@artist= Artist.find(params[:id])
@reach_period= Reachupdate.period(@artist.id,@days)
@update_period=Update.period(@artist.id,@days)
@songs_load= Song.by_artist(@artist.id).joins(:playlists)
@song_period= @songs_load.period(@days)
# CHART
@updates= ChartTransformation::pop_chart(@update_period,@days)
@reach = ChartTransformation::reach_chart(@reach_period,@days)
@dates= ChartTransformation::dates(@days,3)
@reach_labels= ChartTransformation::reach_labels(@reach_period,2)
@songs= ChartTransformation::data_to_releases(@song_period, @days)
@reach_diff = Reachupdate.diff(@reach_period)
@pop_diff = Update.diff(@update_period)
@playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)
end
def overview
@days=90
# DATABASE QUERIES
@artist= Artist.find(params[:id])
@reach_period= Reachupdate.period(@artist.id,@days)
@update_period=Update.period(@artist.id,@days)
@song_period= Song.by_artist(@artist.id).period(@days)
# CHART
@updates= ChartTransformation::pop_chart(@update_period,@days)
@reach = ChartTransformation::reach_chart(@reach_period,@days)
@dates= ChartTransformation::dates(@days,3)
@reach_labels= ChartTransformation::reach_labels(@reach_period,2)
@songs= ChartTransformation::data_to_releases(@song_period, @days)
@reach_diff = Reachupdate.diff(@reach_period)
@pop_diff = Update.diff(@update_period)
@playlisting= ChartTransformation::playlisting(Playlist.by_artist(@artist.id),@days)
respond_to do |format|
format.js {render "timeline_content.js.haml"}
end
end
end
答案 0 :(得分:0)
我猜另一个选择是缓存,我不太熟悉
您必须使自己熟悉缓存。这是您问题的答案。
在您的情况下,它将在视图中进行片段缓存,请阅读指南https://guides.rubyonrails.org/caching_with_rails.html#fragment-caching