条件模型更新——Rails 3.1



我有两个表:

商店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='方法,并对相关的存储对象进行更改。如果您担心不必要的保存,您可以在该方法中设置条件,仅在值更改时保存。

最新更新