Добавление только устройства: подтверждается моделью

Мне нужно добавить функцию подтверждения по электронной почте для модели в приложении Rails, но больше ничего. Это не модель пользователя, она не аутентифицируемая.

я добавил devise :confirmable к модели, и запустил миграцию:

class AddConfirmableToProjects < ActiveRecord::Migration
  def up
    add_column :projects, :confirmation_token, :string
    add_column :projects, :confirmed_at, :datetime
    add_column :projects, :confirmation_sent_at, :datetime
    add_index :projects, :confirmation_token, :unique => true
  end

  def down
    remove_column :projects, :confirmation_token, :confirmed_at, :confirmation_sent_at
  end
end

Но когда я создаю новый проект, я получаю: Could not find a valid mapping for #<Project...

2 ответа

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

# Confirmable is responsible to verify if an account is already confirmed to
# sign in, and to send emails with confirmation instructions.

Если да, возвращается ли ошибка после запуска ваших спецификаций / тестов? Если вы используете FactoryGirl с RSpec, попробуйте добавить config.cache_classes = true в файле test.rb. Это немного тенисто, но выглядит как единственное решение.

Если нет, предоставьте еще немного кода (модель, контроллер, вид).

Да, мы можем настроить подтверждение для любой модели. Ниже приведены шаги, чтобы сделать это. Допустим, у меня есть модель Invitation:

  1. добавлять devise :confirmable в Invitation
  2. Эта модель должна иметь атрибут :email
  3. Создайте миграцию со следующими столбцами:

    t.string   "email"
    t.string   "confirmation_token"
    t.datetime "confirmed_at"
    t.datetime "confirmation_sent_at"
    
  4. Создайте контроллер, который нужно расширить Devise::ConfirmationsController, Добавьте следующий код в этот контроллер:

    def create
      self.resource = resource_class.send_confirmation_instructions(params[resource_name])
      if successful_and_sane?(resource)
        respond_with({}, :location => root_url)
      else
        # code your logic
      end
    end
    
    def new; end
    
    def show; end
    
    • Создать представление электронной почты confirmation_instruction.html.erb под "app/views/devise/mailer/"

    • Следующая строка создаст URL подтверждения в вашей электронной почте: <%= confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

    • Теперь создайте новую запись вашей модели "Приглашение" Invitation.create(:email => params[:email]

    • Теперь при успешном создании запись будет сохранена в БД, и электронное письмо также будет отправлено на это письмо.

Другие вопросы по тегам