Rails 3 — Создание и проверка виртуального пользователя

#ruby-on-rails #ruby #ruby-on-rails-3 #web-applications

#ruby-on-rails #ruby #ruby-on-rails-3 #веб-приложения

Вопрос:

Мы разрабатываем механизм объявления, который работает следующим образом: — Пользователи являются вложенными атрибутами в объявлении. Электронные письма пользователя вводятся в новую форму объявления как вложенные атрибуты. — Хотелось бы работать таким образом — Когда объявление сохранено, необходимо выполнить поиск по электронной почте пользователя с электронными письмами текущих пользователей, если найдено, затем поместить это объявление в профиль этого пользователя, и пользователь будет уведомлен по электронной почте. Если НЕТ, то создается новая учетная запись пользователя и пользователю отправляется электронное письмо с просьбой подтвердить свою учетную запись. При создании нового объявления rails сохраняет все атрибуты, связанные с вложенными атрибутами (это здорово, за исключением случаев, когда электронная почта пользователя уже существует). Поскольку для создания учетной записи пользователя используется только электронная почта пользователя, как мы можем позже внедрить пароль (или автоматически создать пароль, чтобы разрешить пользователю изменять его позже)? Мы используем devise для аутентификации. Есть ли способ использовать devise для выполнения этой функции? Как можно решить эту проблему? Мы высоко ценим вашу помощь.

 class Announcement < ActiveRecord::Base

  attr_accessible  :content, :users_attributes 

  has_many :users, :through => :awards
  has_many :awards, :dependent => :destroy

  accepts_nested_attributes_for :users, :reject_if => lambda { |a| a[:email].blank? }, :allow_destroy => true

end
class User < ActiveRecord::Base
  attr_accessible :email, :first_name, :last_name, :middle_name

  has_many :awards, :dependent => :destroy
  has_many :announcements, :through => :awards, :dependent => :destroy

  email_regex = /A[w -.] @[a-zd-.] .[a-z] z/i

  validates :email, :presence => true, :format => { :with => email_regex }, :uniqueness => { :case_sensitive => false }

end
  

Электронная почта

Ответ №1:

Вы можете внедрить дополнительный логический атрибут в свою пользовательскую модель, чтобы указать, что учетная запись была запрошена, а затем не использовать подтверждаемый модуль devise (поскольку пользователь фактически подтвердил свой адрес электронной почты, перейдя по ссылке). Когда появится пользователь, учетная запись которого не была запрошена, заполните данные аутентификации в этот момент. Предположительно, у вас должен быть атрибут в обратной ссылке по электронной почте, который позволяет вам извлекать соответствующую запись для заполнения.

Комментарии:

1. Марк, спасибо за твою помощь. Для разработки по умолчанию требуется: пароль — даже я пробовал их w / o password wiki — не могу заставить его работать. Я новичок, не могли бы вы объяснить подробнее? Спасибо!