2016-10-20 5 views
1

私はモデルディスクとサーバーを持っています。ここでは複数のサーバーが同じディスクを共有しようとしています。私はディスクとサーバーの関係を作りたいと思っています。私が次のように使うと、ディスクにはサーバーがなく、サーバーにはディスクがあるので意味がなくなります。サーバーとディスクの多対1の関係を実現する

Class Server < ApplicationRecord 
    belongs_to :disk 
end 

Class Disk < ApplicationRecord 
    has_many :servers 
end 

複数のサーバーが同じディスクを共有するようにサーバーとディスクの関係を作成するにはどうすればよいですか。次に、あなたのモデルがhas_and_belongs_to_manyでお互いを参照する必要が

class CreateDisksServersJoinTable < ActiveRecord::Migration 
    def change 
    create_join_table :disks, :servers 
    end 
end 

+0

なぜこれが役に立たないのかもう少し説明できますか? – Sajan

+0

多対多の関係船を使用することができます。多くの関連を通じて。 – user100693

+0

@sajan:ディスクはサーバー(コンピュータマシン)の一部であり、逆はできないので意味がないと言いました。 – anandh

答えて

3

あなたはdisks_servers移行を使用して作成することができますテーブルを結合を使用して、この関係を設定するhas_and_belongs_to_manyを使用することができます

Class Server < ApplicationRecord 
    has_and_belongs_to_many :disks 
end 

Class Disk < ApplicationRecord 
    has_and_belongs_to_many :servers 
end 

ここでは、ApplicationRecordクラスがActiveRecord::Modelから継承していると仮定しています。そうでなければ、これはおそらくうまくいかないでしょう!

+1

ApplicationRecordは、実際には 'ActiveRecord :: Model'を継承するRails 5で導入されました。 Rails 5はそのモデルを生成しますので、ActiveRecord :: Baseにパッチを適用する代わりにApplicationRecordをカスタマイズできます。 – David

+0

@ henners66よく、実際に知っておいてよかった!ありがとう。 – omnikron