Получить конкретный тип полиморфной ассоциации - PullRequest
0 голосов
/ 05 мая 2019

У меня есть эта модель

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, pdf все еще находится , когда html и pdf имеют одинаковые идентификаторы :

html.id
=> 1
pdf.id
=> 1

article = Article.create!(source: html)
article.pdf.id
=> 1

Что я делаю не так? Разве foreign_type не говорит Rails, что сопоставлять для полиморфной ассоциации?

1 Ответ

1 голос
/ 05 мая 2019

Согласно APIdock:

: foreign_type

Укажите столбец, используемый для хранения типа связанного объекта, если это полиморфная ассоциация.По умолчанию предполагается, что это имя ассоциации с суффиксом «_type».Таким образом, класс, который определяет ассоциацию own_to: taggable, polymorphic: true, будет использовать «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
...