私は次の設定をしています。モデル Client はモデル Contacts のサブクラスです。STI テーブルは連絡先です。
次に、テストコードで呼び出し時にエラーが発生します
it "should have the right clients in the right order" do
@producer.clients.should == [a_client, b_client]
end
ORDER BY 句で、存在しないクライアント テーブルを誤ってアドレス指定する SQL ステートメントを使用します。
1) Producer clients associations should have the right clients in the right order
Failure/Error: @producer.clients.should == [a_client, b_client]
ActiveRecord::StatementInvalid:
PGError: ERROR: missing FROM-clause entry for table "clients"
LINE 1: ...lient') AND "contacts"."producer_id" = 6 ORDER BY clients.na...
^
: SELECT "contacts".* FROM "contacts" WHERE "contacts"."type" IN ('Client') AND "contacts"."producer_id" = 6 ORDER BY clients.name DESC
私は SQL の専門家ではありませんが、クライアント テーブルがアドレス指定されている場合、またはテーブルが実際の連絡先によってアドレス指定されている場合は、何らかのエイリアスを設定する必要があります。
降順は、Client の default_scope 順から来ています。
class Client < Contact
...
default_scope order: 'clients.name DESC'
end
これは Rails 3.2.11 および Postgres 9.1、pg gem 0.12.2 にあります。