使用嵌套属性和层次结构

时间:2018-02-27 14:18:51

标签: ruby-on-rails

我有两张桌子 - Training_Assessments:id,name - 标准:id,name,training_assessment_id,parent_id

Model Standards

class Standard < ApplicationRecord
  ATTRIBUTE_PARAMS = %i(id name proportion parent_id).freeze

  belongs_to :training_assessment

  has_closure_tree
end

Model TrainingAssessment

class TrainingAssessment < ApplicationRecord
  ATTRIBUTE_PARAMS =
    [
      :id, :name,
      standards_attributes: Standard::ATTRIBUTE_PARAMS
    ].freeze

  has_many :standards, dependent: :destroy

  accepts_nested_attributes_for :standards, allow_destroy: true
end

我的一个培训评估有很多标准,每个标准都有很多子标准,父母标准有parent_id。我尝试在控制台创建,但子标准没有嵌套训练评估的ID。 那么我怎么做呢? params结构如何?

1 个答案:

答案 0 :(得分:0)

您需要从模型中的一个标准到其父标准的关联:

belongs_to :parent_standard, foreign_key: :parent_id

然后你可以委派:

delegate :training_assessment, to: :parent_standard

编辑:

使用closure_tree gem:child.root.training_assessment_id是父母training_assessment_id