Бета пригласительные коды Rails - PullRequest
1 голос
/ 05 февраля 2012

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

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

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

1 Ответ

1 голос
/ 05 февраля 2012

Вы всегда можете создать модель 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 => 'someone@example.com')

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...