Rails模型通过中间的许多模型属于父模型

时间:2018-06-21 06:53:09

标签: ruby-on-rails activerecord

enter image description here

我看到了模型之间的关系。问题是,公式Formulari可以属于主题,区域,主题或子主题。这就是为什么我使用可选的:true

class Formulari < ApplicationRecord
  belongs_to :topic, optional: true
  belongs_to :area, optional: true
  belongs_to :thema, optional: true
  belongs_to :subthema, optional: true

  ### how to make this work?
  ### it just uses the last one
  has_one :user, through: :area
  has_one :user, through: :thema
end

我想访问@ formulari.user,所以我需要使用has_one直通关系,但是由于我有路径选项,因此比较棘手。如果我通过关系编写了多个has_one,那么rails只会采用其中之一。

我不知道如何通过与模型的关系来告诉rails,多个has_one。

任何帮助将不胜感激。 谢谢

1 个答案:

答案 0 :(得分:0)

只需使用ActiveRecord的多态关联,例如如下所示

class Formulari < ApplicationRecord
  belongs_to :formularable, polymorphic: true

  has_one :user
end

那么其他型号就会有

class Areas
   has_many :formulari, as: :formularable
end

其他两个模型也是如此。是的-为什么不将user_idtopic_id直接添加到Formulari中。在更新时,这仅需要更多逻辑来分配和重新分配它们。在我看来,这比从subthema一直请求用户(使用长连接或长链请求导致数据库响应缓慢)感到沮丧。

如果您最终使用了多态,则可以正确添加列read this doc 如果遇到任何问题,请随时提出问题,但是我鼓励您阅读文档或观看相关的栏目。