私はRailsを研究していて、モデル間の相互作用を整理しようとしています。私が書いたものは機能しますが、コードの臭いは悪いと思います。
たとえば、データベーステーブルParcel
と。を持つ2つのモデルがありますWarehouse
。:current_weight
新しいパーセルを作成するときに、この新しいパーセルに関連するWarehouseインスタンスのを増やしたいと思います。
繰り返しになりますが、すべてが機能しますが、このタイプのコード、つまり2つの異なるオブジェクト間の相互作用は頻繁に使用され、私の心の奥底にある何かが「おい、このコードはひどくて、将来問題を引き起こすでしょう!」と言います。
多分それを整理またはリファクタリングするためのいくつかの良い習慣がありますか?たぶん、そのような相互作用のためのユニバーサルモジュールを作成するか、ユニバーサル、、、、
like
および。でmethod_missing
メソッドを使用するロジックを作成する方が良いでしょう。put_
remove_
check_
warehouse.put_parcel
warehouse.remove_parcel
ルビーコンソールの場合:
parcel = Parcel.new
parcel.weight = 10
parcel.warehouse_id = 1
parcel.save
# Create parcel and increase :current_weight of related warehouse by 10 after save
Warehouse.rb:
class Warehouse < ActiveRecord::Base
has_many :parcels
attr_accessible :name, :current_weight
end
parcel.rb:
class Parcel < ActiveRecord::Base
belongs_to :warehouse
belongs_to :vehicle
attr_accessible :name, :weight, :warehouse_id, :vehicle_id
after_save :set_current_weight
#Bad code:
def set_current_weight
@wh = self.warehouse
@wh.current_weight = @wh.current_weight + self.weight
@wh.save
end
end