2016-06-03 8 views
0

Wie wird #x ausgelöst, wenn :someday gleich true ist?wenn params [: attribute] == true, dann "X" im controller?

db

t.boolean "someday" 

Controller

# In new.html.erb user inputs challenge.name and can checkmark challenge.someday 
def new 
    @challenge = Challenge.new 
end 

# If user checkmarks someday than do x otherwise do y (keep in mind conditional is triggered before challenge is created) 
def create 
    if params[:someday] == true 
    #x 
    else 
    #y 
    end 
end 

Konsole

Started POST "/challenges" for 127.0.0.1 at 2016-06-03 14:04:01 -0400 
Processing by ChallengesController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"Ii3RdJYAnOpT/OOkqVA74b8YD5suUA3Rf4Wegih65xSSU0r1c5DB0UCJVWcGcid3JtSt6fjzmfYpbWZtf2Dm/A==", "challenge"=>{"someday"=>"1", "name"=>"test"}, "button"=>""} 
    User Load (0.5ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT 1 [["id", 15]] 
    Rendered shared/_error_messages.html.erb (0.2ms) 
    Rendered challenges/create.html.erb within layouts/application (48.5ms) 

Gerade jetzt, egal wie ich habe TWE Aked params[:someday] == true der #y Zustand wird immer ausgelöst. Ich habe versucht, params[:someday] == "true", params[:someday] == 1, params[:someday] == "1", params[:someday] == "t"

+0

Setzen Sie einen Debugger wie hebeln oder eine Logging-Anweisung, direkt über Ihr 'if' Erklärung. Wenn du denkst, dass du den Wert von ': irgendwann' gesetzt hast, um wahr zu sein, was ist sein tatsächlicher Wert in dieser Codezeile? –

+0

Lege ich einfach "hebeln" über die Linie? –

+0

Wenn ich Ihre Parameter anschaue, sehe ich ': irgendwann 'in einem': challenge 'Parameter. Was passiert, wenn Sie nach 'params [: challenge] [: sometime] == 1' suchen? –

Antwort

2

Sie tun es falsch. Sie sollten params[:challenge][:someday] tun, wie die someday innerhalb der challenge Hash ist. Der Code unten sollte

def create 
    if params[:challenge][:someday] == "1" 
    #x 
    else 
    #y 
    end 
end 
+0

Nein, das hat es nicht gemacht. Noch ging zu #y –

+0

@ AnthonyGalli.com Versuchen Sie 'params [: Herausforderung] [: eines Tages] .to_i == 1' oder' params [: Herausforderung] [: eines Tages] == "1" ' – Pavan

+1

Letzteres ist, was tat :) Wahrscheinlich das einzige Ding unter der Sonne habe ich nicht versucht –

0

die params[:someday] sollte params[:challenge][:someday] sein funktionieren, da der Wert, den Sie einreichen werden aus einer Form ist

def create 
    if params[:challenge][:someday] 
    #x 
    else 
    #y 
    end 
end 

wird

den Trick
+0

Nein das hat es nicht gemacht. Jetzt gehe es immer zu #x –

+0

ändere dein Formularkästchen in 'f.check_box: irgendwann, {}," true "," false "' dann probier es aus – ollaollu

0

Ihre check_box in html 1 zurückgibt, wenn Sie wollen es zurück boolean dann tun, wie unten. Außerdem sollten in Controller params so: params[: challenge][:someday]

Form

<%= f.check_box :someday, {}, true , false %> 

Controller

def create 
    if params[: challenge][:someday] 
    #x 
    else 
    #y 
    end 
end 
+0

Noch ging es zu #y sogar mit 'true' oder' 1' als Bedingung –