我看到了模型之间的关系。问题是,公式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。
任何帮助将不胜感激。 谢谢
答案 0 :(得分:0)
只需使用ActiveRecord的多态关联,例如如下所示
class Formulari < ApplicationRecord
belongs_to :formularable, polymorphic: true
has_one :user
end
那么其他型号就会有
class Areas
has_many :formulari, as: :formularable
end
其他两个模型也是如此。是的-为什么不将user_id
和topic_id
直接添加到Formulari
中。在更新时,这仅需要更多逻辑来分配和重新分配它们。在我看来,这比从subthema
一直请求用户(使用长连接或长链请求导致数据库响应缓慢)感到沮丧。
如果您最终使用了多态,则可以正确添加列read this doc 如果遇到任何问题,请随时提出问题,但是我鼓励您阅读文档或观看相关的栏目。