【发布时间】:2015-09-22 07:12:20
【问题描述】:
我有一个 rails-api 应用程序,用户可以在其中关注其他用户。
要检查一个用户是否已经关注另一个用户,我需要在属性中包含一个查询,因此,我总是遇到N+1 查询问题。
这是我的代码:
Index 用户控制器中的操作:
def index
@users = ::User.all.paginate(page: params[:page])
end
default_scope 将始终将关注者包含在 User 模型中。
index.json.jbuilder:
json.partial! 'attributes', collection: @users, as: :user
_attributes.json.jbuilder:
json.extract! user, :id, :firstname, :lastname, :username, :follower_count
is_follower = user.follower.find_by(id: current_user.id).present? if current_user
json.following is_follower
结果:
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = $1 [["followed_id", 14]]
Rendered v1/user/users/_attributes.json.jbuilder (1.3ms)
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = $1 [["followed_id", 9]]
Rendered v1/user/users/_attributes.json.jbuilder (1.4ms)
User Load (0.1ms) SELECT "users".* FROM "users" INNER JOIN "relationships" ON "users"."id" = "relationships"."follower_id" WHERE "relationships"."followed_id" = $1 [["followed_id", 13]]
是否有一些解决方法,或者是否有可能在 SQL 查询中生成包含布尔值的动态属性(如果用户关注其他用户)?
非常感谢您。
【问题讨论】:
标签: sql ruby-on-rails json postgresql rails-api