私はいくつかのモデルを持っており、次のようなビューコードを持っています
class Address < ActiveRecord::Base
belongs_to :customer
end
class Customer < ActiveRecord::Base
has_one :address
has_many :invoices
end
class Invoice < ActiveRecord::Base
belongs_to :customer
end
このコードは、単一の住所を持つ顧客の単純な請求書構造を示しています。請求書の住所行を表示するためのビューコードは次のようになります。
<%= @invoice.customer.name %>
<%= @invoice.customer.address.street %>
<%= @invoice.customer.address.city %>,
<%= @invoice.customer.address.state %>
<%= @invoice.customer.address.zip_code %>
上記のビューコードは理想的ではありません。適切にカプセル化するために、請求書は顧客オブジェクトを越えて住所オブジェクトのストリート属性に到達しないようにする必要があります。たとえば、将来、顧客が請求先住所と配送先住所の両方を持つようにアプリケーションを変更した場合、これらのオブジェクトを越えて通りを取得するためにコード内のすべての場所が壊れ、変更する必要があります。この問題を回避するにはどうすればよいですか?