2016-10-25 12 views
1

を通じて推測されていない私は、次のレールモデルを持っている:Railsの5:表名はCLASS_NAME

class Connection < ApplicationRecord 
    belongs_to :graph 
    has_one :node, class_name: 'Person' 
end 

Personへの各connection.nodeポイント。

私は、特定の人々を指す接続を見つけることができるようにしたいと考えています。例えば

Connection.joins(:nodes).where(node: {first_name: 'Jane'})

しかしこれは私にエラーを与える:

ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "node" 
LINE 1: SELECT "connections".* FROM "connections" WHERE "node"."firs... 
                 ^
: SELECT "connections".* FROM "connections" WHERE "node"."first_name" = $1 

私はそれが必要として、そのはnodes代わりのpeopleを問い合わせるためであると考えています。

私もjoins(:people)を試しましたが、これは、関連付けられていないというエラーが発生しました。peopleが見つかりました。

どのようにこれを達成するために、名前を変更することなく、関連付け?

あなたは関連名を入れ​​て(単数( has_one場合)または複数( has_many場合))、 where句には、テーブル名を入れ joins/ includes

答えて

2

:ノード:

Connection.joins(:node).where(people: {first_name: 'Jane'}) 
+0

は '(加入をしなければなりませんでした) '、しかしそれはそれから働いた。ありがとう! –

+1

@ClickUpvote確かに、それは 'has_one'なので、あなたは正しいです! –

+0

where句のテーブル名をplularize/plularizeしない場合の規則もあいまいです。たとえば上記のクエリでは複数形が必要ですが、別のクエリでは単数形のテーブル名を使用する必要がありました。 –