2015-03-21 2 views
1

Я пытаюсь установить связь, где модель, Information, принадлежит либо User, либо Client.Rails принадлежит_от отношения с несколькими возможностями

Я думал о вводе в моей Information.rb

belongs_to :user 
belongs_to :client 

и в User.rb и Client.rb

HAS_ONE: информация

Но что делает его таким образом, чтобы информация могла belong_to одновременно User и Client ,

Есть ли способ сделать это так, чтобы он мог принадлежать либо или нет, просто оставив одно из полей пустым?

P.S. Если это необходимо, я использую Rails 4.2, Ruby 2.2.1 и Devise для моей учетной записи.

Спасибо!

ответ

2

Это звучит необычно, но это хорошо подходит для Polymorphic Association. В этом случае, вы должны объявить имя этой ассоциации

class Information < ActiveRecord::Base 
    belongs_to :informational, polymorphic: true #or something like it 

class User < ActiveRecord::Base 
    has_many informations, as :informational 

class Client < ActiveRecord::Base 
    has_many informations, as :informational 

И вам также необходимо добавить две колонки Information informational_id, :integer и informational_type, :string

и Client и User нужно целое число называется informational_id, что индексируется ,

+0

Я предполагаю, что могу использовать 'has_one' вместо' has_many'? – Vasseurth

+0

Да. Должно быть целесообразно использовать 'has_one' вместо многих. Важной частью является тип и идентификатор, чтобы он мог определить ассоциацию. – creativereason

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