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」の存在を強制することです。

私はEメールのみのサインアップを行っています。これは2段階のプロセスであるため、注意することが重要です。ユーザーが初めて自分の電子メールアドレスを入力すると、Confirmationsコントローラーへのリンクが記載されたアクティベーション電子メールが送信されます。

そのビューにConfirmations Controllerは、検証する必要のある追加の詳細が含まれています。

モデルで通常の操作を行ったvalidates_presence_of場合User、ユーザーが最初にメールアドレスだけを送信すると、Railsは失敗します(これは望ましくありません)。

ユーザーは次のことを行う必要があります。

  1. メールアドレスを入力してください
  2. メールの確認/アクティベーションリンクをクリックします
  3. 名前、パスワードを入力し、カテゴリを選択します。
  4. 送信。

ステップ3、Deviseはnameとpwにpresence_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 に答える