単一責任の原則を適用して、太ったモデルをスリム化しようとしています。多くの一般的なコードをミックスインに抽出し、それらを複数のクラスに含めています。しかし、ローカル変数が mixin を含むクラスのメソッド名 (または attr_accessors) と衝突するという奇妙な問題に直面しています。例えば:
module MyAwesomeMixin
def update_total
my_total = self.pricing_items.reduce(0) {|sum, x| sum + x} # this borks if the "host class" has a method called my_total=
total = my_total
end
end
上記のコード スニペットは、「ホスト クラス」に「変数が完全にメソッドのスコープ内にあり、その周囲の環境とはまったく関係がないmy_total=
ことを確認するにはどうすればよいですか? 」というメソッドがある場合、完全に意図しない結果をもたらします。my_total
update_total