Search code examples
ruby-on-railsrubydeviseinvite

Ruby on rails: Devise, want to add invite code?


I would like to add an invite_code requirement for users to sign up. Ie. in addition to requiring them to specify an email/password combo, I want an additional field :invite_code. This is a temporary fix so that non-wanted users cannot login during a given alpha period.

I'm confused since Devise doesn't add controllers. I'm sort of familiar with the concept of virtual attributes, and it strikes me that I could add a :invite_code to the model, and then just hard code a step now where it says invite code must equal 12345 or whatever for now.

Does this make sense with devise authentication? And how do I go approaching this from a proper rails restful approach?

Thank you very much.


Solution

  • 1) A virtual attribute usually needs a setter in addition to a getter.

    Easiest way is to add

    attr_accessor :invite_code
    attr_accessible :invite_code # allow invite_code to be set via mass-assignment
        # See comment by James, below.
    

    to the User model

    2) I presume that Devise wants the User model to validate. So you could stop the validation by adding

    validates_each :invite_code, :on => :create do |record, attr, value|
        record.errors.add attr, "Please enter correct invite code" unless
          value && value == "12345"
    end
    

    NOTE: added :on => :create since the invite_code is only needed for creating the new user, not for updating.