2017-10-06 1 views
-1

In meiner Rails-Code-Basis gibt es vor einem Aktionsaufruf für eine bestimmte Methode, aber ich kann sie nicht aufrufen.RubyOnRails + Aufruf der before_action-Methode für die IF-Bedingung

Beispielcode: -

ControllerCode

class HomeController < ApplicationController 
    before_action :set_country, only: [:index, :update] 
    def index 
    puts "Inside Index - #{@country}" 
    end 

    def update 
    if true && book_my_ride 
    puts "Inside Update - BookMyRide" 
    end 
    end 

    def book_my_ride 
    puts "Inside BookMyRide - #{@country}" 
    end 

    def set_country 
    @country = "SampleCountry" 
    end 
end 

Wenn Update-Methode aufgerufen wird, weil vor der Aktion - set_country genannt wird.

Aber wenn die Steuerung die IF-Bedingung mit 'book_my_ride' erreicht, ruft das System die Methode 'set_country' für book_my_ride nicht auf.

+0

Haben Sie erwartet, dass 'set_country' in diesem Szenario zweimal aufgerufen wird? So funktioniert es nicht. –

+0

@SergioTulentsev - Haben Sie Ihren Punkt. Falsch habe ich book_my_ride für before_action hinzugefügt – Rubyist

Antwort

0

Ihre book_my_ride-Methode führt eine puts-Anweisung aus, und die Ausgabe ist nil. Ich denke also, was passiert ist Ihre Logik es wirklich sagt

if true && nil 
    do something 
end 

Das wird nie wahr zurückkehren, so die Ausführung kann nicht fortgesetzt werden. Versuchen Sie, eine Rückgabe von dieser Methode hinzuzufügen, und überprüfen Sie, ob der Ausführungspfad ordnungsgemäß fortgesetzt wird. Beispiel:

def book_my_ride 
    puts "Inside BookMyRide - #{@country}" 
    return 'Called book_my_ride' 
    end 

Ich bin nicht sicher, was diese Puts Aussagen sind für - wenn sie nur für das Debuggen sind, würde ich versuchen, mit entweder

Rails.logger.info "debug statement here ..." 

oder eine Rückkehr anstelle eines Puts

return "Called #{__method__} --------" 

die andere gute Praxis, wenn Sie das Debuggen, ist spec Tests erstellen Sie das Reglerverhalten zu überprüfen.

Verwandte Themen