以下是'组件的一个示例'我有。 就是这个例子,每个循环都会触发一次rails缓存。有没有办法避免这种情况?
show_ids = current_user.get_show_ids
?查看:
@shows.each do |show|
if logged_in?
if current_user.is_following(show) ### Hitting the cache (!)
#remove button
else
#add button
end
else
#something else
end
end
用户模型:
def is_following(show)
get_show_ids.include?(show.id)
end
def get_show_ids
Rails.cache.fetch([self, "all_shows_ids", "v3"]) do
Following.where("user_id = ?", id).pluck(:show_id)
end
end
我尝试用@ids ||= get_show_ids.include?(show.id)
做同样的结果。
答案 0 :(得分:0)
我假设您将模型Show
和User
连接为Following
模型,用于n:m关系。
当您检索节目时,您可以使用user_id
current-user
加入关注点。如果存在以下内容,则结果集将具有以下集合的字段,而如果用户未跟随则不具有。
请注意,您需要明确select
来自Following
模型的字段,否则加入只会返回Show
模型中的字段