SQL查询的作用域语法不正确

SQL查询的作用域语法不正确,sql,ruby-on-rails,ruby-on-rails-4,Sql,Ruby On Rails,Ruby On Rails 4,我试图将查询限制为只返回属于登录用户且在日期范围内的结果。这是范围: scope :unpaid, ->(start_date, end_date, current_user) { joins('LEFT OUTER JOIN carrier_commissions ON dealer_commissions.phone_id = carrier_commissions.phone_id AND dealer_commissions.name = carrier_commissio

我试图将查询限制为只返回属于登录用户且在日期范围内的结果。这是范围:

scope :unpaid, ->(start_date, end_date, current_user) { joins('LEFT OUTER JOIN carrier_commissions ON
  dealer_commissions.phone_id = carrier_commissions.phone_id AND
  dealer_commissions.name = carrier_commissions.name')
  .where('carrier_commissions.id IS NULL').where('customer_id: current_user.customer.id, created_at: start_date..end_date') }

  def self.reconciliation(start_date, end_date, current_user)

    ...

    dealer_commissions.unpaid.each do |unpaid|
      unpaid.update(status: "Unpaid", discrepancy_balance: unpaid.payment)
      if unpaid.initial_discrepancy.blank?
        unpaid.update(initial_discrepancy: unpaid.payment)
      end
    end

  end
下面是具有实际参数的
协调
控制器操作:

  def reconcile
    start_date = Date.new(params[:range][:"start_date(1i)"].to_i,params[:range][:"start_date(2i)"].to_i,params[:range][:"start_date(3i)"].to_i)
    end_date = Date.new(params[:range][:"end_date(1i)"].to_i,params[:range][:"end_date(2i)"].to_i,params[:range][:"end_date(3i)"].to_i)
    DealerCommission.reconciliation(start_date, end_date, current_user)
    redirect_to dealer_commissions_url, notice: 'Dealer commissions reconciled.'
  end
这是我日志中的一个示例:

SELECT COUNT(*) FROM "dealer_commissions" LEFT OUTER JOIN carrier_commissions ON
    dealer_commissions.phone_id = carrier_commissions.phone_id AND
    dealer_commissions.name = carrier_commissions.name WHERE "dealer_commissions"."customer_id" = ? AND ("dealer_commissions"."created_at" BETWEEN '2015-02-03' AND '2015-06-03') AND (carrier_commissions.id IS NULL) AND (customer_id: current_user.customer.id, created_at: start_date..end_date)  [["customer_id", 8]]
SQLite3::SQLException: unrecognized token: ":": SELECT COUNT(*) FROM "dealer_commissions" LEFT OUTER JOIN carrier_commissions ON
    dealer_commissions.phone_id = carrier_commissions.phone_id AND
    dealer_commissions.name = carrier_commissions.name WHERE "dealer_commissions"."customer_id" = ? AND ("dealer_commissions"."created_at" BETWEEN '2015-02-03' AND '2015-06-03') AND (carrier_commissions.id IS NULL) AND (customer_id: current_user.customer.id, created_at: start_date..end_date)

目标是获取具有这些条件的记录(
开始日期、结束日期、当前用户)。

您需要更正语法。目前,您正在向mysql传递一个静态字符串,不包括rails变量

.where('customer_id = ? AND created_at > ? AND created_at < ?', current_user.customer.id, start_date, end_date)
.where('customer\u id=?和created\u at>?和created\u at<?',当前用户.customer.id,开始日期,结束日期)

(客户id:current\u user.customer.id,创建时间:start\u date..end\u date)
看起来不像有效的SQL。错误:未定义的局部变量或方法“current\u user”用于#您应该将变量传递到未付范围:
经销商佣金。未付(当前用户,日期从,日期到)
Stackoverflow上的所有代码我都无法更正。特别是如果它缺少碎片。您需要从您拥有变量的地方传递变量…
当前用户
仅作为参数从控制器在
协调
操作中传递。