【问题标题】:Using select_tag multiple => true to get a combined scope使用 select_tag multiple => true 获得组合范围
【发布时间】:2017-06-20 03:38:46
【问题描述】:

我正在尝试使用 select_tag 为报表生成器创建记录范围。报告项目之一是能够为报告选择多个“状态”。 IE。 “批准”、“拒绝”等。

参数输入正常,控制台报告:

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( 对于其他表单元素。我的想法是采用 Claims_scope 并将其用作源(因为它已经确定了范围)。但我无法让 Claims_scope 到有两个、三个或更多“状态”。它是一个或全部。

【问题讨论】:

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


    【解决方案1】:

    只需将scope 用于多个值:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多