2016-07-27 12 views
0

Ich habe folgend in meinem UserscontrollerWie mache ich eine "if-Anweisung" für Rails has_many Association?

def show 
    @user = User.find(params[:id]) 

    if current_user.id != params[:id] #! need to fix this 
    @answer = Answer.new 
    else 
    @answer = Answer.find(params[:id]) 
    end 

wo jeder Benutzer has_many Antworten durch ein Quiz-Modell. Wie kann ich die if-Anweisung schreiben? Wenn die Antworten für den betreffenden Benutzer leer sind, springt er zum Erstellen eines neuen Quiz? (und wenn nicht, um die Informationen anzuzeigen).

+0

Nun, ich bin ein wenig unklar, was die Details Ihrer Einrichtung angeht - es gibt keine Quiz- oder Antwortinformationen - aber wenn Sie überprüfen möchten, ob ein Benutzer ein bestimmtes Quiz angenommen hat, warum erstellen Sie keine Cross-Join-Tabelle für Benutzer und Quizzes und es wird nur eingerichtet, wenn sie das Quiz nehmen (oder Sie können es komplizierter machen als das, wenn Sie wollten). Mein Glaube ist, dass Ihre Logik, auf den Antworten zu basieren, falsch ist, und Sie sollten stattdessen auf dem Quiz basieren? Aber ich mache Vermutungen von Dingen, die man nicht sieht (oder präsentiert) – MageeWorld

+1

Während viele Leute einen Stich im Dunkeln machen könnten, könnte es ein wenig hilfreicher sein, ein bisschen mehr Informationen zu geben, zum Beispiel wenn du sagst, dass ein Benutzer hat viele Antworten durch ein Quizzes-Modell, beziehen Sie sich auf eine tatsächliche 'has_many: Antworten, durch:: Quiz' Relation, oder einfach nur, dass ein Benutzer has_many Quizzes, und das Quiz has_many Antworten hat? vielleicht auch deinen models code? –

Antwort

0

ich klar bin nicht das, was man tut, unerwünschte check.SO zu erreichen, wie Sie den Code versuchen, wenn Sie wollen nur überprüfen, ob jeder Benutzer (signed_in Benutzer vorausgesetzt) ​​wollen Aktion gehen bedingt zu zeigen, ich glaube, Sie kann dies versuchen: -

##assuming user has_many answers 
##answer belongs_to user 
def show 
    ##get the user 
    @user = User.find(params[:id]) 
    ##verify if answer is present 
    if @user.answers.present? 
    @answer = @user.answers 
    else 
    @answer = @user.answers.new 
    end 
end 

Die obige Logik verwendet werden kann, wie auch viele durch Assoziationen hat, müssen nur zu durch

es

Hoffnung Modell ändern hilft :)

+0

bitte um Himmels Willen nicht verwenden, es sei denn - sonst –

+0

aktualisiert ... danke für den Fang .. @ Deepak – Milind

+0

@Milind Ich habe dies verwendet, aber aus irgendeinem Grund erlaubt es mir nicht auf jeden anderen Benutzer Quiz zugreifen, mir eine geben to_key error, und wenn dies der Fall ist, werden die Antworten beim Übermitteln nicht in den Textfeldern angezeigt. – helpisgood

Verwandte Themen