簡體   English   中英

驗證包含在創建時不起作用

[英]validate inclusion not working on create

好吧,我有一個很奇怪的場景,我不知道該如何處理,因此在我嘗試向您解釋時請耐心等待。

我有以下模型。

class User < ActiveRecord::Base
  Roles = { pending: 'pending_user', role2: 'role2', etc: 'etc' }
  attr_accessible :role
  validates :role, inclusion: {in: Roles.values}
  before_create :add_pendng_role #Set user role to Roles[:pending]
end

現在的問題是,第一次創建記錄時,此驗證失敗! 例如,在我的控制器中,我有以下代碼:

class UsersController < ActionController::Base
  @user = User.new params[:user]
  if @user.save  # ---------------   ALWAYS FAILS -------------------------------
    #do something
  else
    #do something else
  end
end

現在,我認為它失敗的原因是因為僅在驗證通過后才添加一個角色before_create 現在我知道,我不能代替 before_create :add_role before_validation :add_role ,因為我認為這將每一個驗證完成時添加的角色。 我之所以不能這樣做,是因為用戶角色將在應用程序中更改,並且我不想每次對用戶進行驗證時都重置角色。

關於如何解決這個問題的任何線索?

使用* before_validation *,如rails回調指南中所述

class User < ActiveRecord::Base
  Roles = { pending: 'pending_user', role2: 'role2', etc: 'etc' }
  attr_accessible :role
  validates :role, inclusion: {in: Roles.values}
  before_validation :add_pendng_role, on: :create #Set user role to Roles[:pending]
end

您可以嘗試:

before_validation :add_role, on: :create

看起來你可以改變before_createbefore_validation如果你使用:on參數:

before_validation :add_pendng_role, :on => :create

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM