我正在寻找有关如何解决此rails数据建模问题的链接或文档。这似乎并不简单。
我有一个包含许多列的报告模型,例如滚轮,折断,轴承等。在每列中,我将零件的状态保存为“好”或“坏”。这是简单的部分。
但是,如果在保存报表时这些列中的任何一列都“不好”,我将使用after_save回调来创建Correction模型的新实例。在更正模型中,我保存了report_id以及零件的名称 - 轮,断裂等。
然后,我希望能够在使用accepts_nested_attributes_for编辑报表模型的同时编辑更正模型。这可能吗?如何访问与“报告”列名称对应的“更正”模型的特定实例?我不确定我是否会更好地使用不同的方法。
对于任何可能有用的链接或文档,我将不胜感激。
谢谢!
答案 0 :(得分:1)
查看此处的文档:http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html accepts_nested_attribute将使您能够在创建报告的同时为给定报告创建更正。但在您的情况下,只有在创建报告后才会创建更正,因此我认为您不需要使用accepts_nested_attribute。
我认为您想要做的事情很容易,取决于您实施报告和更正模型的方式。 让我们假设您的模型与此类似:
class Report< ActiveRecord::Base
has_many :corrections
attr_accessible :wheel, :brake, etc...
after_save :create_corrections_if_bad_parts
def create_corrections_if_bad_parts
# For each part if one of them is changed to false, it create a new correction
self.attributes.keys.each do |key|
if send(key + "_changed?") and !self.attributes[key]
# Calling build will fill the report_id for you
correction = self.corrections.build(broken_part: key)
correction.save
end
end
end
end
class Correction < ActiveRecord::Base
belongs_to :report
attr_accessible :broken_part
end
这个模型假设你为每个部分都有一个列,但如果你有太多的部分,最好规范化数据库或使用哈希存储所有部分.... 您可以在那里了解有关关系的更多信息:http://guides.rubyonrails.org/association_basics.html