如何确保始终填充多对多关系

时间:2013-07-08 20:51:11

标签: ruby-on-rails ruby activerecord

假设我有2个型号:设备和设置。我需要跟踪和控制每个设备的设置。设备和设置的数量将随着时间的推移而增长。很明显是一个多对多的情况,所以我将使用“has_many:through”方法,第3列用于device_settings表中的设置值。

我的挑战是,在添加新设置时,我想确保所有设备都在device_settings表中填充了所有设置(Settings模型具有default_value属性,可用于填充device_settings.value属性)。将设置添加到表后,可以轻松确保新设备或已编辑的设备插入新的设置行。但有没有一种简洁的方式来改造现有设备?

在某些时候,系统会更新设备设置,我想避免在此过程中处理缺失值的复杂逻辑。我认为最好强制桥接表首先包含所有行。

我可以并且已经编写了一些丑陋的代码(循环等)来填充设置模型上的:after_save上的device_settings表,但我正在寻找更清洁的东西。

谢谢

1 个答案:

答案 0 :(得分:0)

这符合法案吗?

SettingsController

  def create
   ...
    if @setting.save
      Device.all.each {|d| d.settings << @setting}
    end
  end
end