2016-10-20 2 views
1

У меня есть модели Disk and Server. Здесь более одного сервера собираются использовать один и тот же диск. Я хочу установить связь между диском и сервером. Если я использую следующее, это становится бессмысленным, потому что на диске нет серверов и серверов.Rails много-одно отношение для серверов и диска

Class Server < ApplicationRecord 
    belongs_to :disk 
end 

Class Disk < ApplicationRecord 
    has_many :servers 
end 

Как сделать, чтобы установить связь между сервером и диском, чтобы несколько серверов имели один и тот же диск?

+0

Не могли бы вы объяснить немного больше, почему это бесполезно? – Sajan

+0

Вы можете использовать много для многих кораблей отношений. Имеет много связей. – user100693

+0

@sajan: Я упоминал, что это бессмысленно, потому что диск является частью сервера (компьютерная машина) и наоборот невозможно. – anandh

ответ

3

Вы можете использовать has_and_belongs_to_many, чтобы установить эти отношения вверх, используя disks_servers таблицу соединения, которые могут быть созданы с помощью миграции:

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

Тогда ваши модели должны ссылаться друг на друга 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 вводится в Rails 5, который действительно наследуется от 'ActiveRecord :: Model'. Rails 5 генерирует эту модель для вас, поэтому вы можете настроить ApplicationRecord вместо перехвата обезьян ActiveRecord :: Base. – David

+0

@ henners66 хорошо, что хорошо знать! Благодарю. – omnikron

 Смежные вопросы

  • Нет связанных вопросов^_^