2013-04-21 3 views
1

Мне нужно добавить функциональность электронной почты подтверждения модели в приложение 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...

+0

[Как добавить: confirmable для пользователей] (https://github.com/plataformatec/devise/wiki/How-To:-Add-:confirmable-to-Users) –

ответ

1

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

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

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

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

+0

I хотите сделать это, чтобы проверить адреса электронной почты пользователей: люди могут загрузить что-то в приложение, но после этого им нужно подтвердить свою электронную почту. Только один раз. Он не работает при нормальных обстоятельствах, а не rspec. – Nicolas

0

Да, мы можем настроить подтверждение на любую модель. Ниже приведены шаги для этого. Допустим, у меня есть модель А 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 в разделе "приложение/просмотров/DEViSE/почтовик /"

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

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

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

Смежные вопросы