1

我有一个 Ruby on Rails 应用程序,它显示了一个程序列表。这些程序中的每一个都有一个喜欢/不喜欢按钮,因此每个程序都有一个关于用户是否喜欢该程序的数据库查询。这将创建 20 个数据库调用(每页显示)。这是正常的吗?

我意识到我可以根据任何用户是否喜欢该程序来缓存那些,但是忽略缓存,这对于页面来说是很正常的事情还是我对它进行了非常糟糕的编程?

4

1 回答 1

1

假设“用户”通过“用户程序”拥有许多“程序”:

控制器 -

@user_programs = User.find(id).user_programs

看法 -

<% @user_programs do |user_program| %>
  <%= user_program.liked %>
<% end %>

如果您还需要“程序”信息,请在获取收藏时添加 :include

@user_programs = User.find(id).user_programs(:include => :program)

如果您正在搜索并且即使它没有连接到当前用户也可以返回任何程序,那么您将必须查询程序并使用连接来获取当前用户信息:

@programs = Program.joins("LEFT JOIN user_programs ON user_programs.program_id = programs.id").where("user_programs.user_id = ? AND programs.name =?", current_user.id,params[:q])
于 2013-06-10T16:38:54.723 回答