Как сделать относится к необязательным с одной стороны и обязательным с другой - PullRequest
0 голосов
/ 30 августа 2018

У меня есть модель Folder и модель Project, как показано ниже:

class Folder < ApplicationRecord
  belongs_to :project
  belongs_to :owner, polymorphic: true
end

Я создаю папку для проекта как:

folder = @project.folders.new(folder_params).merge(owner: current_user)
folder.save 

Я хочу использовать ту же модель Folder для пользователя, который не имеет ничего общего с проектом, как показано ниже:

folder = current_user.folders.new(folder_params)
folder.save

У меня также есть модель пользователя:

has_many :folders, as: :owner

Можно ли сделать belongs_to :project обязательным при создании для проекта и необязательным при создании для пользователя.

И каков наилучший способ достичь этого, то есть использовать одну и ту же модель для двух целей. Я думаю о том, чтобы сделать папку как полиморфную как для Folderable, так и для владельца, как показано ниже:

class Folder < ApplicationRecord
  belongs_to :project
  belongs_to :owner, polymorphic: true
  belongs_to :folderable, polymorphic: true
end

И

class Project < ApplicationRecord
  has_many :folders, as: :folderable
end

И

class User < ApplicationRecord
  has_many :folders, as: :owner
  has_many :folders, as: :folderable
end

Также возможно ли объявить два полиморфных в одной модели, как я думаю для user модели?

...