【发布时间】:2021-02-11 11:25:50
【问题描述】:
我的技能模型需要 2 组值来进行业务推广:
- 一个来自附加的 ValuesList 对象
- 其他来自与质量相关的附加值列表
模型如下所示:
class Value < ApplicationRecord
belongs_to :values_list
end
class ValuesList < ApplicationRecord
has_many :values, inverse_of: :values_list, dependent: :delete_all
has_many :skills
# Extra values for missing answer (quality)
has_many :skills_values_lists, foreign_key: "values_list_id"
has_many :referents, class_name: "Skill", through: :skills_values_lists
end
class Skill < ApplicationRecord
belongs_to :values_list
# Extra values for missing answer (quality)
has_many :skills_values_lists, foreign_key: "skill_id"
has_many :references, class_name: "ValuesList", through: :skills_values_lists
accepts_nested_attributes_for :skills_values_lists, reject_if: :all_blank, allow_destroy: true
end
多亏了这个,我可以查询附加到技能的常规值:
@regular_values = @skill.values_list.values
(返回一个 ActiveRecord::Associations::CollectionProxy 对象),
以及来自多个值列表的额外值:
@extra_values = @skill.references.map {|vl| vl.values}
(返回一个包含 1 个 ActiveRecord::Associations::CollectionProxy 对象的数组)。
我想将这 2 个结果合并到一个对象中,以便在经典的 .each 循环中显示所有可用值的列表。
如何做到这一点?
【问题讨论】:
-
你不能像这样将额外的值合并到常规值中吗:
@regular_values = @skill.values_list.values@regular_values.merge(@skill.references.map { |v1| v1.values }或者设置一个结合两者的新变量:@total_values = @regular_values + @extra_values -
@Hackman:感谢您让我选择答案的选项 2!
标签: ruby-on-rails activerecord