def post_stat
@urls = CallUrl.all
call = params[:call_url_id] ? params[:call_url_id] : CallUrl.first.id
call_url = CallUrl.find(call)
@Posts = callback_url.posts
end
我正在尝试重构此代码,以便在我调用的每个类中只调用一次3次数据库?
答案 0 :(得分:1)
我假设这是Rails,虽然没有指定。您的@posts = Post.where(call_url_id: params[:call_url_id])
实例变量未在该方法中使用,但我不知道它是否稍后在视图中使用。我会把它留给这个答案。
只要params [:call_url_id]包含一个值,你就可以只用一次数据库旅行:
def post_stat
call_url_id = params[:call_url_id].presence || CallUrl.first.id
@posts = Post.where(call_url_id: call_url_id)
end
但是这并没有解决你的后备位置,即获得属于第一个CallUrl的所有帖子。在没有额外访问数据库以获取其ID的情况下,无法知道哪些帖子与第一个CallUrl相关。但是我们可以进行优化,以便仅在没有提供params [:call_url_id]时才进行额外的旅行:
self.containerView.contentLayoutGuide.widthAnchor.constraint(equalTo: self.view.widthAnchor).isActive = true