There's an easy method:

def get_award(user)
  u = User.find(user).score += 10
  u.save
end

My issue is, it is possible to potential race condition result in a user get_award two times but get only 10 score? How to prevent it?

You need the 'user' instance, update the score and save it. Inside your code you are saving the course, not the instantiated object:

def get_award(user)
  u = User.find(user).score += 10
  u.save
end

Yes it's possible.

related questions : How do I avoid a race condition in my Rails app?

You should use 2 kinds of securing positive &lifier pessimistic

http://guides.rubyonrails.org/active_record_querying.html See point No 10