用于在视图中的循环内获取数据的模式?

时间:2015-10-11 19:53:42

标签: html ruby-on-rails ruby

以下是'组件的一个示例'我有。 就是这个例子,每个循环都会触发一次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)做同样的结果。

1 个答案:

答案 0 :(得分:0)

我假设您将模型ShowUser连接为Following模型,用于n:m关系。

当您检索节目时,您可以使用user_id current-user加入关注点。如果存在以下内容,则结果集将具有以下集合的字段,而如果用户未跟随则不具有。

请注意,您需要明确select来自Following模型的字段,否则加入只会返回Show模型中的字段