1

Railsでacts_as_taggable_onを使用しており、まだタグ付けされていないすべての製品のリストを取得しようとしています。MySQLでは、次のクエリが機能しました。

  def self.untagged
    available.find(:all, 
    :joins => %{LEFT JOIN taggings ON products.id = taggings.taggable_id AND taggings.taggable_type = "Product"}, 
    :conditions => "taggings.id IS NULL AND for_sale IS true",
    :order => "products.updated_at DESC"
    )

ただし、Postgresでは、「Product」列が存在しないというエラーが表示されます。

生成されたSQLは次のようになります。

SELECT count(*) AS count_all FROM "products"  LEFT JOIN taggings ON products.id = taggings.taggable_id AND taggings.taggable_type = "Product" WHERE (taggings.id IS NULL AND for_sale IS true) AND (products.date_expires > '2011-09-12') ) 

これを機能させる方法について何か提案はありますか?MySQLで引き続き機能するように、アクティブレコードに適した方法を使用したいと思います。しかし、それは私が喜んで犠牲にするものです。

前もって感謝します..

4

1 に答える 1

2

PostgreSQLでは、文字列リテラルを二重引用符ではなく一重引用符で引用する必要があります。二重引用符は識別子(テーブル名や列名など)を引用するためのものです。MySQLは標準で高速かつ緩く動作する傾向があり、PostgreSQLははるかに厳格になる傾向があります。

于 2011-09-13T04:48:38.197 に答える