Rails模型可以与另一个模型的列名相关联吗?

时间:2014-12-16 23:19:17

标签: ruby-on-rails data-modeling model-associations

我正在寻找有关如何解决此rails数据建模问题的链接或文档。这似乎并不简单。

我有一个包含许多列的报告模型,例如滚轮,折断,轴承等。在每列中,我将零件的状态保存为“好”或“坏”。这是简单的部分。

但是,如果在保存报表时这些列中的任何一列都“不好”,我将使用after_save回调来创建Correction模型的新实例。在更正模型中,我保存了report_id以及零件的​​名称 - 轮,断裂等。

然后,我希望能够在使用accepts_nested_attributes_for编辑报表模型的同时编辑更正模型。这可能吗?如何访问与“报告”列名称对应的“更正”模型的特定实例?我不确定我是否会更好地使用不同的方法。

对于任何可能有用的链接或文档,我将不胜感激。

谢谢!

1 个答案:

答案 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