通过关联

时间:2017-06-25 08:39:04

标签: rails-activerecord ruby-on-rails-5 sti

这会有点棘手。

所以,我有一个由Section个实体组成的论坛应用程序。论坛还有Char个实体(撰写帖子和创建主题)和CharGroup个实体,用于分组字符。这些部分可以设置为私人访问。

然后我得访问那些私人部分的权限。我有一个带有STI的SectionAccess类,可以是Access::CharAccess::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_groupssection.access_group_ids)甚至构建(如果我致电section.access_groups.new我会收到新的CharGroup记录),但不是为了写作。无论我如何尝试撰写此关系(例如section.access_groups << CharGroup.firstsection.access_group_ids << CharGroup.first.idsection.access_group_ids = [1]或其他任何内容),它都会给我一个错误ActiveRecord::AssociationTypeMismatch: ::Char(#45301460) expected, got #<CharGroup...

即使我尝试section.access_groups.create name: 'Foo',它也会创建CharGroup记录,但在尝试关联它时会引发错误。

除了重新定义我需要的方法之外,还有其他可能的解决方案吗?

0 个答案:

没有答案