2016-11-01 16 views
0

グラフノードクラスの実装があり、これは有向非循環グラフとして機能したいと考えています。スルーアソシエーションでプライマリキーを指定する方法

class Node 
    has_many :edges 

    has_many :parents, 
      :foreign_key => 'parent_id', 
      :through => :edge 

    has_many :parent_edges, 
      :foreign_key => 'child_id', 
      :class_name => 'Edge', 
      :dependent => :destroy 

    # similar for children 
end 

class Edge 
    belongs_to :parent, 
      :class_name => 'Node' 

    # similar for child 

    has_many :edge_properties 
end 

私は親ノードの関係をつかむしようとすると、生成されたクエリは、まだ主キーとして node_idを使用していますが、次のように

団体はおおよそです。

SELECT `nodes`.* 
FROM `nodes` 
     INNER JOIN `edges` 
       ON `nodes`.`id` = 
        `edges`.`parent_id` 
WHERE `edges`.`node_id` = 16    # where clause uses node_id, should be child_id 
ORDER BY `nodes`.`name` ASC 

Where句にchild_idを使用するようにクエリを変更するにはどうすればよいですか?

+0

は、あなたが配置しようとしましたか?また、SQLを生成するRailsコードを表示できますか? –

答えて

0

正しい解(もTIL:別の関連付けを指定することができるオプションを介して)parent`ライン:belongs_toのエッジ `でchild_id`:FOREIGN_KEY =>`

has_many :parent_edges, 
      :foreign_key => 'child_id', 
      :class_name => 'Edge', 
      :dependent => :destroy 

has_many :parents, 
      :source => 'parent', 
      :through => :parent_edges # using another association 
関連する問題