我有两张桌子:
存储 raw_stores_data
每天从第三方收到raw_stores_data。
如果在raw_stores_data中为该记录修改了那些字段,我会更新商店模型的某些字段。
目前我有一堆条件语句可以检查每个字段。有没有更好的方法来编码呢?
new_data = raw_stores_data.all.select do |item|
item.store_id.present?
end
new_data.each do |item|
if item.field1 != item.stores.field1
...
...
...
# update record with hash of fields to update created above
end
答案 0 :(得分:0)
你可以在'raw'模型中添加一个关联和特殊的mutator,它们知道如何操纵'stores'对象。这用于将模型代码保留在模型中。薄控制器,综合模型等。
class Store < ActiveRecord::Base
has_one :raw_stores_data
end
class RawStoresData < ActiveRecord::Base
belongs_to :store
def field1=(value)
store.field1 = value
store.save!
field1 = value
end
end
我正在挥动一些细节,你可能想要改变关联的方向或使它朝两个方向移动。
编辑:
您可以这样使用:
raw_data = RawStoreData.find(param[:id]) # or new or however you get this object
raw_data.field1 = param[:field1]
分配行为将使用'field1 ='方法,并对相关的商店对象进行更改。如果您担心不必要的保存,您可以使用该方法进行条件化,仅在值发生变化时进行保存。
我希望这更清楚。