user1932402
user1932402

Reputation:

Devise invite code

I would like to add a invite code requirement for users to register in my application. I investigated the devise_invitable gem for devise and this looks very promising. However, It should not be possible to continuously invite people to the application, like devise_invitable does.

To solve the problem, I need to implant user levels in my application. I found this project on github and now I got the following idea: Once a user registers (invited by another existing user) it starts in level 1 and must complete tasks in order to archive experience points. He works his/her way up to the next level where he can invite 1 new member and then in the next level he can invite 1 other and in the next level, the user can invite 2 members, so on, so on.

I am fairy new to Ruby and I'd like to know how to encomplish this and to know if this is even possible to insert in my users controller.

Thank you for reading and have a nice day.

Upvotes: 1

Views: 567

Answers (2)

ford
ford

Reputation: 11826

I'm not sure if this changed since the question was asked in 2012, but devise_invitable has an invitation_limit parameter:

invitation_limit: The number of invitations users can send. The default value of nil means users can send as many invites as they want, there is no limit for any user, invitation_limit column is not used. A setting of 0 means they can't send invitations. A setting n > 0 means they can send n invitations. You can change invitation_limit column for some users so they can send more or less invitations, even with global invitation_limit = 0.

You can see how this parameter is used by looking at the source here. One important part:

# Return true if this user has invitations left to send
def has_invitations_left?
  if self.class.invitation_limit.present?
    if invitation_limit
      return invitation_limit > 0
    else
      return self.class.invitation_limit > 0
    end
  else
    return true
  end
end

Upvotes: 0

janders223
janders223

Reputation: 3153

This should be a fairly straight forward process, as the number of invitations a user has is just an integer stored in your database. It could be something as simple as:

def level_up(level)
  self.invitation_limit += level
  self.save
end

While a very simple implementation, you just pass in the users level, add it to their current number of invitations, and save the user. It all really depends on how fancy you want to get, but it really comes down to basic math, and saving it to the database.

Upvotes: 2

Related Questions