使用select_tag multiple =>如果获得组合范围,则为true

时间:2017-06-20 03:38:46

标签: ruby-on-rails ruby-on-rails-4

我正在尝试使用select_tag为报表生成器创建记录范围。其中一个报告项目是能够选择多个"状态"为报告。即。 '已批准','拒绝'等等。

params很好,控制台报告:

Parameters: {"utf..., "status"=>["Pending", "Approved"]}

但我无法让我的控制器正确地调整范围。我目前正在模型中设置范围:

scope :claim_status_pending, -> { where(claim_status_id: '1') }
scope :claim_status_approved, -> { where(claim_status_id: '2') }...

在我的控制器中:

if params[:status].present?
      new_claims_scope = Claim.none
      if params[:status].include? 'Pending'
        pending_scope = claims_scope.claim_status_pending
        new_claims_scope = pending_scope.merge(new_claims_scope)**
      elsif params[:status].include? 'Approved'
        approved_scope = claims_scope.claim_status_approved
        new_claims_scope = approved_scope.merge(new_claims_scope)
      else params[:status].include? 'Any'
        new_claims_scope = claims_scope.where("claim_status_id > ?", 0)
      end
      claims_scope = new_claims_scope
    end

以下是我的观点处理方式:

= select_tag "status", options_for_select([ "Any", "Pending", "Approved", "Denied", "Under Review" ], "Any"), multiple: true

" claims_scope"已经从Claims.all使用.where(对于其他表单元素)。我的想法是使用claim_scope并将其用作源(因为它已经是作用域)。但我不能让claim_scope有两个,三个或更多& #34;状态"。它是一个或全部。

1 个答案:

答案 0 :(得分:0)

只需将scope用于多个值:

scope :by_statuses, (statuses)-> { where(claim_status_id: statuses) }

现在您可以通过单个或多个(数组)状态找到对象