如何使用Devise current_user预加载相关表

时间:2016-07-22 19:54:56

标签: sql ruby-on-rails devise arel

我有一个Rails应用程序,我正在重构我的控制器并查看我的应用程序所做的所有数据库查询。

希望尽可能使用include / join来限制所做的数据库查询次数,并且我正在使用设计进行身份验证。

这是我遇到的问题:

目前,让我们说当前用户(由Devise确定)有很多服务并且有很多朋友。如果,我想显示用户,服务和朋友,我可以在我的控制器中执行以下操作:

def show
  @friends = @current_user.friends
  @services = @current_user.services
end

现在问题是我将进行三次单独的SQL查询。一个用来抓住当前用户(由Devise处理),另一个用于获取朋友,第三个用于获取服务。

相反(如果不是Devise处理用户的SQL查询),我可以使用include方法执行以下操作:

current_user = User.where(<devise's method to find the user>).include(:services).include(:friends)

只需向数据库发出一个查询,即可获得每个控制器端点所需的确切对象。

关于如何做到这一点的任何想法?我是否必须开始修改Devise的current_user方法,或者有更好的方法吗?

0 个答案:

没有答案