0

这是我的User模型:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :token_authenticatable, :confirmable, :timeoutable, 
         :recoverable, :rememberable, :trackable, :validatable,
                 :email_regexp =>  /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i

  attr_accessible :email, :password, :password_confirmation, :remember_me, :name, :confirmed_at, :confirmation_token, :category_ids
    validates_uniqueness_of :email, :case_sensitive => false
    validates_confirmation_of   :password

end

我想要做的是在“激活”帐户上强制存在“category_ids”。

我正在做仅电子邮件注册- 需要注意这一点,因为它是一个两阶段的过程。用户第一次输入他们的电子邮件地址时,他们会收到一封激活电子邮件 - 带有指向Confirmations控制器的链接。

该视图Confirmations Controller具有需要验证的其他详细信息。

如果我只是validates_presence_ofUser模型上进行常规操作,那么当用户最初只提交一个电子邮件地址时,Rails 会失败(我不希望这样做)。

用户应该:

  1. 请输入电邮地址
  2. 单击电子邮件中的确认/激活链接
  3. 填写名称、密码并选择一个类别。
  4. 提交。

第 3 步,Devise 对 name 和 pw 强制执行 present_of_validation。但不是我的自定义项目称为category.

我怎么做?

谢谢。

4

1 回答 1

1

您可以将:on => :update选项传递给validates_presence_of,它不会在创建时验证:

例子

 validates_presence_of :category_ids, :on => :update
于 2012-06-21T12:25:46.140 回答