我需要在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 :(得分:1)
添加声音听起来有点奇怪:可以确认不属于您的用户型号的型号。你确定吗?
# Confirmable is responsible to verify if an account is already confirmed to # sign in, and to send emails with confirmation instructions.
如果是,运行Spec / Tests后这是否会返回错误?如果您正在使用RSpec运行FactoryGirl,请尝试在test.rb文件中添加config.cache_classes = true
。这有点阴暗,但看起来是唯一的解决方案。
如果否,请提供更多代码(型号,控制器,视图)。
答案 1 :(得分:0)
是的,我们可以设置确认任何型号。以下是执行此操作的步骤。假设我有一个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
在“app / views / devise / mailer /”
confirmation_instruction.html.erb
以下行会在您的电子邮件中创建确认网址:<%= confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>
现在通过Invitation.create(:email => params[:email]
现在成功创建,记录将保存在数据库中,电子邮件也会发送到该电子邮件。