2014-04-07 25 views
5

işlemlerini, belirli bir denetleyicide ve eylemde ActiveRecord doğrulamalarını çalıştırmak mümkündür. Sadece signup_controller # üzerinde şifre gerekli doğrulama çalıştırmak için gereken ben user_controller ve, belirli bir denetleyicideki ActiveRecord doğrulamasını ve

signup_controller var Örneğin

users_controller form password teslim etmezse user.rb içinde

+0

Kullandığınız ray sürümü nedir – Bijendra

+0

Rails 4.0.4 kullanıyorum – saygun

cevap

15

kullanarak doğrulamaları çalıştırabileceği bir if koşullu:

def validate_email? 
    validate_email == 'true' || validate_email == true 
end 

Bu validate_email özellik bir Sanal nitelik olabilir:

validates :email, presence: true, if: :validate_email? 

Şimdi (Modelinizdeki) Bu örnek yöntemini tanımlamak gerekir Modeliniz:

attr_accessor :validate_email 

Ve şimdi siz Bu sanal özniteliğe bağlı olarak e-posta doğrulaması yapabilir. Bizim belirli bir eylem üzerinde birden doğrulamaları için

with_options if: :validate_email? do |z| 
    z.validates :email, presence: true 
    z.validates :name, presence: true 
    end 

kullanabilirsiniz @markets' cevabını

uygulanması için sadece bir ipucu

def create 
    ... 

    @user.validate_email = true 
    @user.save 

    ... 
end 
+0

Bu, oluşturma/güncelleştirme eylemleri için iyi bir yanıttır, ancak yok etmeye çalışmayacaktır. –

1

eylemi kullanımını validates :password, :if => :password_changed? oluşturmak Alan o zaman iyi olmalısın.

1

: Örneğin, signup_controller#create içinde, şunun gibi bir şey yapabilirsiniz.

before_action :no_validate, only: [:first_action, :second_action, ..] 
    before_action :action_based_validation, only: [:first_action, :second_action, ..] 


    def first_action; end 
    def second_action; end 

    def update 
    .. 
    @instance.validate = session[:validate] 
    .. 
    if @instance.update(instance_params) 
     .. 
    end 
    end 


    private 

    def no_validate 
     session[:validate] = nil 
    end 

    def action_based_validation 
     # action_name in first_action will = "first_action" 
     session[:validate] = action_name 
    end 

Model

attr_accessor :validate 

    with_options if: "validate == 'first_action'" do |z| 
    z.validates :email, presence: true 
    ..more validations.. 
    end 

    with_options if: "validate == 'second_action'" do |z| 
    z.validates :name, presence: true 
    ..more validations.. 
    end 

fazla ayrıntı:

Ayrıca, bu eylemden parametreler bazı doğrulamaları

Kontrolörü gerekecektir belirten bir değişken geçmek için oturumu kullanmak : http://guides.rubyonrails.org/active_record_validations.html#conditional-validation

İlgili konular