我有两个表:
商店raw_stores_data
每天从第三方接收raw_store_data。
如果raw_store_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
您可以向知道如何操作'stores'对象的'raw'模型添加关联和特殊的mutator。这有助于将模型代码保留在模型中。瘦控制器、综合模型等
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='方法,并对相关的存储对象进行更改。如果您担心不必要的保存,您可以在该方法中设置条件,仅在值更改时保存。