Separation of concerns and more

Say you have an app not dissimilar to StackOverflow where users vote on
posts. Say an Up Vote causes the voter to receive one reputation point.
might see something like this in the vote_up model:

class UpVote < ActiveRecord::Base
belongs_to :user
after_create :increase_user_reputation


def increase_user_reputation
user = self.user
user.reputation == user.reputation + 1

There is one issue with this code: The value 1 is hard coded. Where does
such a value belong? Another issue is that some UpVote should have no
knowledge of user.reputation. We solve this by changing the callback:

def increase_user_reputation

Then we add an instance method to User:

def modify_reputation(reputation)
self.reputation = self.reputation + reputation!


  1. Who’s responsible for calling save! ? The
    increase_user_reputationinside the UpVote model or the
    modify_reputation method inside the user model?
  2. The +1 one to reputation doesn’t seem like a good idea to hard code.
    Where does Rails keep such configuration settings?
  3. Does the code look reasonable? Are there any shortcuts?

Just a bump!

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs