0

has_and_belongs_to_many で友達と敵のつながりを作ろうとしているので、次のように作成しました。

   create_table :people do |t|
     t.string :name
   end

   create_table "relations", :id => false do |t|
     t.integer "person_a_id", :null => false
     t.integer "person_b_id", :null => false
     t.boolean :friends
   end

私が達成したかった最初の段階は、Person: HABTM 関係を定義することであり、後でスコープを定義することです。has_and_belongs_to_many には :foreign_key と :association_foreign_key があるため、Person で接続を定義するのに問題があります。したがって、A が B の友人である場合、B は A の友人ではありません。見つかったのは、:finder_sql と :delete_sql を手動で設定することです。私が見逃しているエレガントなソリューションがあるに違いないと確信しています。

ありがとう

4

1 に答える 1

0

モデルの設定を考えると、間違った関係を使用しようとしていると思います。

リレーションに追加の属性(ここではブール値のfriends属性)がある場合は常に、has_many:throughを使用する方が適切です。

こちらのディスカッションをご覧ください

結論は次のとおりです。

結合モデルで検証、コールバック、または追加の属性が必要な場合は、has_many:throughを使用する必要があります。

于 2012-12-24T08:07:19.997 に答える