You can clone with
class User < ActiveRecord::Base
#A number of methods giving this class too many responsibilities already
class Account < ActiveRecord::Base
# t.integer credits
#The question is, is there any way to avoid writing code of the form "user.account.add_credit", and thus violating the law of demeter.
# For example:
def bill_user(user, amount)
if user.account.available_credits > amount
#Charge user's credit card
Say that we have a user class (above) with the typical problem of having too many responsibilities. We are trying to introduce the concept of "prepaid credits" so that when we bill a user instead of charging their # card, we can deduct credits instead. We want to add some methods like "add_credit" and "available_credits". We want to avoid adding these methods to User.
One idea I had was to create an Account object (see above), and define the methods on that.
The question is, is there any way to avoid writing code of the form "user.account.add_credit", and thus violating the law of demeter.