2017-10-06 3 views
-1

Dans ma base de code Rails, il y a une action avant l'appel pour une méthode spécifique mais je ne suis pas capable de l'appeler.RubyOnRails + Impossible d'appeler la méthode before_action pour la condition IF

Exemple de code: -

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 

Lorsque la méthode de mise à jour est appelée, à cause de l'action avant - set_country est appelée.

Mais lorsque le contrôle atteint la condition IF ayant 'book_my_ride' - Le système n'appelle pas la méthode 'set_country' pour book_my_ride.

+0

Est-ce que vous vous attendiez à ce que 'set_country' soit appelé deux fois dans ce scénario? Ce n'est pas comme ça que ça fonctionne. –

+0

@SergioTulentsev - Vous avez compris. Par erreur, j'ai ajouté book_my_ride pour before_action – Rubyist

Répondre

0

Votre méthode book_my_ride exécute une instruction puts et la sortie est nulle. Je pense donc que ce qui se passe est votre logique, il est en train de dire

if true && nil 
    do something 
end 

Cela ne reviendra jamais vrai, si l'exécution ne peut pas continuer. Essayez d'ajouter un retour à partir de cette méthode et vérifiez si le chemin d'exécution se poursuit correctement. Exemple:

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

Je ne suis pas sûr de ce que ces déclarations sont puts pour - si elles sont juste pour le débogage, j'essayer d'utiliser soit

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

ou utiliser un retour au lieu d'un puts L'autre bonne pratique, si vous déboguez, est de créer des tests de spécification pour vérifier le comportement du contrôleur.