A model should only talk to its immediate association. According to the Law of Demeter, you shouldn’t talk to the association’s property or association’s association.
Here we talk about Rails delegate approach.
class Profile < ActiveRecord::Base
<%= @profile.user.address %> <%= @profile.user.city %>
Rails provides helper method to accomplish delegation, which uses DSL to generate wrapper methods. It can also prevent error call method on nil object if :allow_nil => true is added.
class Profile < ActiveRecord::Base belongs_to :user delegate :address, :city, :to => :user, :prefix => true, :allow_nil => true end <%= @profile.user_address %> <%= @profile.user_city %>
Originally published at Kolosek blog.