У меня есть модель 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
модели?