Rails Association只有一种工作方式

时间:2016-08-07 12:24:35

标签: ruby-on-rails associations has-many-through

我的模型“Preconditions”在“Assignments”模型中创建记录之间的关系,因此一个赋值可以是另一个赋值的先决条件。

在控制台中,Assignment.find(3).preassigns按照我的预期输出Assignment表中的第二条记录。但是,反向不起作用。 Assignment.find(2).mainassigns返回一个空集。

precondition.rb

class Precondition < ApplicationRecord
    belongs_to :mainassign, class_name: "Assignment"
    belongs_to :preassign, class_name: "Assignment"
end

assignment.rb

class Assignment < ApplicationRecord
    belongs_to  :seminar
    has_many    :scores, dependent: :destroy

    has_many    :preconditions, class_name: "Precondition",
                                foreign_key: "mainassign_id",
                                dependent: :destroy
    has_many    :mainconditions, class_name: "Precondition",
                                foreign_key: "preassign_id",
                                dependent: :destroy

    has_many    :preassigns, through: :preconditions, as: :mainassign, source: :preassign
    has_many    :mainassigns, through: :preconditions, as: :preassign, source: :mainassign

    validates :name, presence: true, length: { maximum: 40 }
    validates :seminar_id, presence: true
    validates :possible, presence: true
    validates_numericality_of   :possible, only_integer: true
end

基于类似的问题,我尝试在Preconditions表中添加一个多态标签,如下所示:

belongs_to :mainassign, class_name: "Assignment", polymorphic: true

这会导致错误,但是日志建议我尝试使用source_type,所以我尝试将其添加到赋值模型中,如下所示:

has_many    :mainassigns, through: :preconditions, as: :preassign, source: :mainassign, source_type: "Assignment"

但是这导致找不到SQL列错误。

提前感谢您的任何见解。

1 个答案:

答案 0 :(得分:1)

这里不需要多态。您需要更改:through的{​​{1}}值:

自:

mainassigns

要:

has_many :mainassigns, through: :preconditions, as: :preassign, source: :mainassign