我有这个模特
class Article
belongs_to :source, polymorphic: true
belongs_to :html, foreign_type: "Html", foreign_key: "source_id"
belongs_to :pdf, foreign_type: "Pdf", foreign_key: "source_id"
end
当我设置带有html源的文章时,当html和pdf具有相同的ID时仍会找到pdf
:
html.id
=> 1
pdf.id
=> 1
article = Article.create!(source: html)
article.pdf.id
=> 1
我在做什么错? foreign_type
不会告诉Rails多态关联要匹配什么吗?
答案 0 :(得分:1)
根据APIdock:
:foreign_type
如果这是多态关联,则指定用于存储关联对象类型的列。默认情况下,这被认为是 带有“ _type”后缀的关联的名称。所以一堂课 定义一个longate_to:taggable,多态的:真正的关联将使用 默认为“ taggable_type”:foreign_type。
因此,您应该在foreign_type
关联中使用source
来指定存储关联对象类型的列。
我认为您需要两种方法html
和pdf
,因此当源为Html
或Pdf
时可以使用它。在这种情况下,我认为您应该为其创建两个方法,例如:
def html
source if source_type == "Html"
end
def pdf
source if source_type == "Pdf"
end