I’m adding payment plans to an app. The requirements are simple: each User has resource limits in the app (max. number of photos) and is moved automatically to the correct Plan as they add or remove photos.
When a User moves to a different Plan the change is pushed to the appropriate Stripe customer via the API and they are billed at the end of the month accordingly.
Since a User does not explicitly change their plan themselves, nor can they be on more that one plan at once I don’t see the need for a Subscription model. I’m keeping it simple with a one-to-one between User and Plan.
In fact the only reason I have a Plan model at all is to avoid having to call the Stripe API every time I move a User to a different Plan.
The associations I have are:
# user.rb
class User < ActiveRecord::Base
has_many :photos
belongs_to :plan
end
# plan.rb
class Plan < ActiveRecord::Base
has_many :users
end
This is a multi-tenanted app and since User is the tenant somehow it doesn’t feel right for it to belongs_to another object.
Do you think I’ve over-simplified this? Is there a better way to associate User and Plan?