3

whereで使うとなぜかDateクラスが認識される

scope :with_active_subthing, joins("left outer join thing_subthing on thing_subthing.patient_id = thing.id").where("thing_subthing.start_date <= ? AND ( thing_subthing.end_date > ? OR thing_subthing.end_date IS NULL ) ", Date.today, Date.today)

しかし、結合で使用すると認識されません

scope :with_active_subthing, joins("left outer join thing_subthing on thing_subthing.patient_id = thing.id AND (thing_subthing.start_date <= ? AND ( thing_subthing.end_date > ? OR thing_subthing.end_date IS NULL )) ", Date.today, Date.today)

私は得る:

RuntimeError: unknown class: Date
4

1 に答える 1

4

結合部分を構築する基礎となるコードを見ると、特定のオブジェクトタイプを探していることがわかりますが、Dateはそれらの1つではありません。エラーはやや紛らわしいですが、それが言っているのは、日付をの引数として使用できないということですjoins。なぜこれを実行するのかは質問からは明確ではありませんが、最初の例で行ったように、結合と結合の両方を絶対に使用する必要があります。

「raise」行に落ちているために問題を引き起こしているコードは次のとおりです。

def build_joins(manager, joins)
  buckets = joins.group_by do |join|
    case join
    when String
      'string_join'
    when Hash, Symbol, Array
      'association_join'
    when ActiveRecord::Associations::JoinDependency::JoinAssociation
      'stashed_join'
    when Arel::Nodes::Join
      'join_node'
    else
      raise 'unknown class: %s' % join.class.name
    end
  end
于 2012-12-08T20:32:22.490 に答える