Ruby on rails 这是一个很好的负载优化吗?
在安装之后,我开始解决几个n+1问题 我以前使用安全导航操作员检查当前用户帐户的当前订阅:Ruby on rails 这是一个很好的负载优化吗?,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,在安装之后,我开始解决几个n+1问题 我以前使用安全导航操作员检查当前用户帐户的当前订阅: def current_subscription @current_subscription ||= current_user&.account&.subscription #n+1 scenario @current_subscription end 我使用.try()重构了一个新的查询: 这似乎很有效:我的测试仍然通过,Bullet也很满意 这是一个好的做法还是有更好的方法
def current_subscription
@current_subscription ||= current_user&.account&.subscription #n+1 scenario
@current_subscription
end
我使用.try()重构了一个新的查询:
这似乎很有效:我的测试仍然通过,Bullet也很满意
这是一个好的做法还是有更好的方法
谢谢。您不需要这第二个
@current\u subscription
,它的值将从current\u subscription
方法返回。如果您有任何Subscription
且account\u id
为null
的订阅,则该方法可能不起作用。在ActiveRecord中有一个名为find\u by
的方法,它执行您尝试执行的操作:
def current_subscription
@current_subscription ||= Subscription.find_by(account_id: current_user&.account_id)
end
谢谢,这样更干净。
def current_subscription
@current_subscription ||= Subscription.find_by(account_id: current_user&.account_id)
end