Rails:ActiveRecord在哪里vs合并

首先,我得到特定日期之间的审核状态。

date_range = Date.parse(@from_date).beginning_of_day..Date.parse(@to_date).end_of_day @review_statuses = ReviewStatus.where(updated_at: date_range) 

接下来,我需要应用’AND’条件。

  @review_cycle = params[:review_cycle] if @review_cycle.present? @review_statuses = @review_statuses.merge( ReviewStatus.where(evidence_cycle: @review_cycle) .or(ReviewStatus.where(roc_cycle: @review_cycle))) end 

现在,对于下面我应该应用’where’或’merge’。

 @status = params[:status] @review_statuses.where(evidence_status: :pass, roc_status: :pass) if @status == 'pass' 

有人可以解释,我们什么时候应该使用merge而不是where

您通常希望在特殊情况下使用除外 – 最常见的是,将条件应用于查询中的辅助(联合)表。 这是因为

  1. 它更短/更清晰/更惯用,而且
  2. merge有一些棘手的边缘情况:它主要结合了两个查询,但有些情况下,一方的价值只会覆盖另一方。

鉴于此,即使您现有的条件也不需要merge

 # Unchanged date_range = Date.parse(@from_date).beginning_of_day..Date.parse(@to_date).end_of_day @review_statuses = ReviewStatus.where(updated_at: date_range) # direct #where+#or over #merge @review_cycle = params[:review_cycle] if @review_cycle.present? @review_statuses = @review_statuses.where(evidence_cycle: @review_cycle).or( @review_statuses.where(roc_cycle: @review_cycle)) end # more #where @status = params[:status] @review_statuses = @review_statuses.where(evidence_status: :pass, roc_status: :pass) if @status == 'pass'