仅添加设计:可确认为模型

时间:2013-04-21 00:26:14

标签: ruby-on-rails ruby devise devise-confirmable

我需要在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 个答案:

答案 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模型:

  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
    
    • 在“app / views / devise / mailer /”

    • 下创建电子邮件视图confirmation_instruction.html.erb
    • 以下行会在您的电子邮件中创建确认网址:<%= confirmation_url(@resource, :confirmation_token => @resource.confirmation_token) %>

    • 现在通过Invitation.create(:email => params[:email]

    • 创建模型“邀请”的新记录
    • 现在成功创建,记录将保存在数据库中,电子邮件也会发送到该电子邮件。