2016-03-21 1 views
0

Ich schreibe eine Funktion, die bei der Aktualisierung eines Attributs eines Modells den Status is_kyc_verified auf false setzt. HierWas ist der richtige Weg, um eine Funktion zu implementieren, die in Rails den Wert auf false zurückgibt?

ist der Code des User-Modell und die Methode, die den Status ändert:

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :confirmable, :lockable, :timeoutable and :omniauthable 
    devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    before_update :change_kyc_status, unless: :is_kyc_verified_changed? 

    #Associations 
    has_one :address, dependent: :destroy 
    has_one :kyc, dependent: :destroy 
    has_one :pan_detail, dependent: :destroy 
    has_one :document, dependent: :destroy 
    has_many :nominee_details, dependent: :destroy 
    has_many :bank_details, dependent: :destroy 

    #Accept Attributes for associated model 

    accepts_nested_attributes_for :address, :kyc, :pan_detail, 
           :document, :nominee_details, :bank_details, 
           allow_destroy: true, reject_if: :all_blank 


    #validates 
    validates :name, :mobile_no, :gender, :dob, presence: true 
    validates :mobile_no, numericality: true, length: { is: 10 } 

    private 
    ## 
    # Check if is_kyc_verified is set to true 
    # if 'yes' then alert user and set is_kyc_verified to false 
    def change_kyc_status 
    self.is_kyc_verified = false if self.valid? and self.is_kyc_verified.present? 
    true 
    end 

end 

Verfahren zunächst verwendet, um die self.is_kyc_verified zurückzukehren, was falsch war, wiederum führte zu „Rollback der Transaktion“. Ich habe am Ende explizit ein True hinzugefügt, damit die Transaktion nicht zurückgesetzt wird.

Ich denke jedoch, dass dies nicht der richtige Weg ist, um diese Funktion zu implementieren. Können Sie bitte meinen Code überprüfen und den richtigen Weg vorschlagen?

Antwort

3

Was ist der zugrunde liegende Zweck von is_kyc_verified? Gibt es einen Grund, warum du tatsächlich wahr oder falsch zurückkehren musst? Es scheint, als würde die Rückkehr allein den Trick erfüllen:

def change_kyc_status 
    is_kyc_verified = (valid? && is_kyc_verified.present?) ? false : true 
    return 
end 
+0

Dies scheint der richtige Weg zu sein, es zu tun. – SreekanthGS

+0

'is_kyc_verified' ist ein Flag, das anzeigt, dass der Kunde seine Kundendaten bestätigt hat. Aber wenn er seine persönlichen Informationen wieder bearbeitet, d. h. nachdem er verifiziert wurde, muss er seine Daten erneut verifizieren, daher muss ich "is_kyc_verified" auf false setzen, wenn er irgendwelche Informationen aktualisiert. – VoidZero

+0

Übrigens wird in Ihrer Lösung auch 'return' verwendet, andernfalls wird' false' zurückgegeben. – VoidZero

Verwandte Themen