ruby中的重构方法而不是3次调用DB使它成为一个调用

时间:2017-09-27 21:36:22

标签: ruby

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次数据库?

1 个答案:

答案 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