Rails 协会只有一种工作方式
Rails Association working only one way
我的模型 "Preconditions" 在 "Assignments" 模型中创建记录之间的关系,因此一个分配可以是另一个分配的先决条件。
在控制台中,Assignment.find(3).preassigns 输出作业 table 中的第二条记录,如我所料。然而,反过来是行不通的。 Assignment.find(2).main 分配 returns 一个空集。
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
基于类似的问题,我尝试在先决条件 table 中添加多态标记,如下所示:
belongs_to :mainassign, class_name: "Assignment", polymorphic: true
这导致了错误,但日志建议我尝试 source_type,因此我尝试将其添加到分配模型中,如下所示:
has_many :mainassigns, through: :preconditions, as: :preassign, source: :mainassign, source_type: "Assignment"
但这导致 SQL 列未找到错误。
提前感谢您的任何见解。
这里不需要多态。您需要更改 :through
的值 mainassigns
:
发件人:
has_many :mainassigns, through: :preconditions, as: :preassign, source: :mainassign
收件人:
has_many :mainassigns, through: :mainconditions, as: :preassign, source: :mainassign
我的模型 "Preconditions" 在 "Assignments" 模型中创建记录之间的关系,因此一个分配可以是另一个分配的先决条件。
在控制台中,Assignment.find(3).preassigns 输出作业 table 中的第二条记录,如我所料。然而,反过来是行不通的。 Assignment.find(2).main 分配 returns 一个空集。
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
基于类似的问题,我尝试在先决条件 table 中添加多态标记,如下所示:
belongs_to :mainassign, class_name: "Assignment", polymorphic: true
这导致了错误,但日志建议我尝试 source_type,因此我尝试将其添加到分配模型中,如下所示:
has_many :mainassigns, through: :preconditions, as: :preassign, source: :mainassign, source_type: "Assignment"
但这导致 SQL 列未找到错误。
提前感谢您的任何见解。
这里不需要多态。您需要更改 :through
的值 mainassigns
:
发件人:
has_many :mainassigns, through: :preconditions, as: :preassign, source: :mainassign
收件人:
has_many :mainassigns, through: :mainconditions, as: :preassign, source: :mainassign