条件模型更新 - Rails 3.1

时间:2011-11-04 11:51:02

标签: ruby-on-rails ruby ruby-on-rails-3

我有两张桌子:

存储 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

1 个答案:

答案 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 ='方法,并对相关的商店对象进行更改。如果您担心不必要的保存,您可以使用该方法进行条件化,仅在值发生变化时进行保存。

我希望这更清楚。