Бета-пригласительные коды Rails

Я видел отличные ресурсы для создания систем приглашения, в которых приложение отправляет приглашение по электронной почте со ссылкой на адрес электронной почты приглашенного пользователя, например devise_invitable.

Я пытаюсь понять, как сгенерировать кучу кодов приглашения, чтобы я мог раздавать их конкретным людям, а затем они могли зарегистрироваться с этим кодом приглашения. У меня есть некоторые идеи о том, что я буду делать, но мне интересно, сталкивался ли кто-нибудь с этим раньше, и есть ли какие-то проверенные и верные методы.

Кстати, я использую devise для аутентификации.

Любая помощь очень ценится.


person Zach    schedule 04.02.2012    source источник
comment
Как насчет этого решения stackoverflow.com/a/3705462/816291? Кроме того, вы можете создавать простые типовые приглашения с полями электронной почты (если вы хотите отправить их по почте) и кодом. Код будет генерироваться случайным образом при создании действия нового приглашения..? :)   -  person Oleg Pasko    schedule 05.02.2012


Ответы (1)


Вы всегда можете создать модель InviteCode, содержащую случайно сгенерированный погашаемый код, который можно выдать по запросу и проверить позже.

Например:

class User < ActiveRecord::Base
  has_one :invite_code_used,
    :class_name => 'InviteCode',
    :foreign_key => 'user_redeemer_id'

  has_many :invite_codes,
    :foreign_key => 'user_creator_id'
end

class InviteCode < ActiveRecord::Base
  belongs_to :user_creator,
    :class_name => 'User',
    :foreign_key => 'user_creator_id'

  belongs_to :user_redeemer,
    :class_name => 'User',
    :foreign_key => 'user_redeemer_id'
end

Вы бы создали случайно сгенерированную строку для использования в качестве кода приглашения, предположительно где-то вроде before_validation, чтобы убедиться, что она заполнена перед сохранением. Когда код будет погашен, свяжите код с созданным пользователем, чтобы вы могли видеть, кто на самом деле воспользовался им.

Создать код приглашения для пользователя очень просто:

@invite_code = @user.invite_codes.create(:email => '[email protected]')

Вы можете добавить некоторые проверки при создании InviteCode, чтобы убедиться, что данный пользователь не создал больше, чем нужно, и любую другую бизнес-логику, которая может вам потребоваться.

person tadman    schedule 04.02.2012