这会有点棘手。
所以,我有一个由Section
个实体组成的论坛应用程序。论坛还有Char
个实体(撰写帖子和创建主题)和CharGroup
个实体,用于分组字符。这些部分可以设置为私人访问。
然后我得访问那些私人部分的权限。我有一个带有STI的SectionAccess
类,可以是Access::Char
或Access::Group
,因此可以访问各个字符和char_groups。它们都有一个section_id
字段,将它们链接到一个部分和一个access_id
字段,链接到char或char_group(以及cource的type
字段)。
class Access::Char < Access
belongs_to :char, class_name: '::Char', foreign_key: :access_id
end
class Access::Group < Access
belongs_to :group, class_name: 'CharGroup`, foreign_key: :access_id
end
现在我正在尝试将这些内容链接到Section
类。
class Section < ApplicationRecord
...
has_many :access_chrs, class_name: 'Access::Char'
has_many :access_chars, class_name: '::Char', through: :access_crhs, source: :char
# I need the :chars accociation for something else here
has_many :access_grps, class_name: 'Access::Group'
has_many :access_groups, class_name: 'CharGroup', through: :access_grps, source: :group
...
end
这就是我遇到问题的地方。 access_chars
关联完全没问题,允许读写完全没问题。
access_groups
关联适用于阅读(例如section.access_groups
和section.access_group_ids
)甚至构建(如果我致电section.access_groups.new
我会收到新的CharGroup
记录),但不是为了写作。无论我如何尝试撰写此关系(例如section.access_groups << CharGroup.first
,section.access_group_ids << CharGroup.first.id
,section.access_group_ids = [1]
或其他任何内容),它都会给我一个错误ActiveRecord::AssociationTypeMismatch: ::Char(#45301460) expected, got #<CharGroup...
。
即使我尝试section.access_groups.create name: 'Foo'
,它也会创建CharGroup记录,但在尝试关联它时会引发错误。
除了重新定义我需要的方法之外,还有其他可能的解决方案吗?