2016-06-23 10 views
0

複数の多対多の関係を持つアプリケーションを作成しています。ここに一つの例があります:アプリユーザーはいくつかのスキルを持っています。同時に、多くのjob_postsはいくつかのスキルを持っています。複数のRailsの多対多の関係

User----has_many----->Skill(smart)<---has_many----job_posting 
          ^
           | 
          has_many 
           | 
          Application 

だから、私は基本的に(この例では、「スマート」)1つのスキルを作成することができるようにしたい、次を参照してください。私はこのような何かを持っていることができるように、私はスキルのモデルを再利用できるようにしたいのですが次に、has_many関係を使用して、いくつかの異なるモデルからそのスキルを参照します。

これを行うにはどうすればよいですか?私はこれらの設定のいくつかを私のアプリに持っているので、関係を扱うために余分なモデルを作るのを避けたいと思います。 myUser.skills.add(Skill.find(1)) myCompany.skills.add(Skill.find(1)):最後に

、このような何かを行うことができるようにいいだろう。 ..

PS 私はskill.add()のようなものはないことを知っています。あなたが建設的な何かを持っているなら、私が代わりに使うことができるものを提案してください。おかげで:)私は私のデータベース

+0

あなたは関係情報を保持するためにDBテーブルを設定する必要があります。 'has_many:through'を使ってみてください –

+0

うん、これは私が避けたいと思っていたものです:/特に、このような設定ごとにそれぞれのリレーションシップタイプごとに1つずつ作成しなければならないので、 – Silvertail

+0

どうしましたか?あなたは非効率なルートをとって、場所の外にすべての外部キーを追加することによって関係テーブルを避けることができます。 –

答えて

1

としてMySQLを使用してい

P.P.S 私は、これは2.9節で関連文書hereを確認することができます多型association.Youの典型的な例だと思います。あなたの場合に使用することができます

class Skill < ActiveRecord::Base 
    belongs_to :skillable, polymorphic: true 
end 

class User < ActiveRecord::Base 
    has_many :skills, as: :skillable 
end 

class JobPosting< ActiveRecord::Base 
    has_many :skills, as: :skillable 
end 
+0

恐ろしい!私はこれを使用することができ、スキルにメソッドを追加してオブジェクトからハッシュを作成できるようにする必要があると思うので、user.skills.create(Skill.find(1).hashify())のようなことができます。 – Silvertail

+1

このようなあなたのモデルにスキルを追加することができますuser.skills << Skill.find(1) – geoandri

+0

それは素晴らしいです!私はそれが1つの本当の多対多の関係だけで得ることができると思います!あなたは本当の命の恩人です! btw、これがバックグラウンドで何をするのか分かりますか? DBはこれをどのように追跡していますか? – Silvertail