Добавление только устройства: подтверждается моделью
Мне нужно добавить функцию подтверждения по электронной почте для модели в приложении 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
:
- добавлять
devise :confirmable
вInvitation
- Эта модель должна иметь атрибут
:email
Создайте миграцию со следующими столбцами:
t.string "email" t.string "confirmation_token" t.datetime "confirmed_at" t.datetime "confirmation_sent_at"
Создайте контроллер, который нужно расширить
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]
Теперь при успешном создании запись будет сохранена в БД, и электронное письмо также будет отправлено на это письмо.