2017-08-18 1 views
1

Ich baue eine grundlegende Einkaufsliste Anwendung in Rails. Jedes "Element" hat zwei Eigenschaften: name und checked. Name ist nur der Name des Artikels. Checked soll anzeigen, ob der Benutzer den Artikel auf seiner Einkaufsliste "abgehakt" hat.Ruby-Methode funktioniert nicht wie erwartet

Ich habe eine einfache Methode in meinem Artikel-Controller, um dies zu beheben. Das Problem ist, dass die Methode nur false in true ändert. Es wird nicht rückgängig gemacht und ermöglicht es mir, Elemente zu deaktivieren.

Dies ist die Methode, die in meinem Element-Controller ist:

def checked 
    @item = Item.find(params[:id]) 
    if [email protected] 
     @item.update(checked: :true) 
    else 
     @item.update(checked: :false) 
    end 
    redirect_to root_path 
    end 

Dies wird für die Falschen zu wahres Gespräch nur arbeiten. Die zweite Hälfte der if-Anweisung scheint nicht zu funktionieren. Gedanken?

+4

Ein einfacherer Weg: '@ item.update (checked: [email protected]?)' - Dein Code funktioniert nicht, weil er tatsächlich ein 'symbol' Objekt anstelle von' true' oder 'false' sendet, entferne das Semikolon vor 'true' und' false' und es sollte funktionieren. – MrYoshiji

Antwort

2

Nicht sicher über den zugrunde liegenden Grund (vielleicht #update verwenden), aber ich würde versuchen werden, diese mehr zu kodieren wie:

def checked 
    @item = Item.find(params[:id]) 
    if @item.checked 
     @item.update_attributes(checked: false) 
    else 
     @item.update_attributes(checked: true) 
    end 
    redirect_to root_path 
end 

... oder ...

def checked 
    @item = Item.find(params[:id]) 
    @item.update_attributes(checked: [email protected]) 
    redirect_to root_path 
end 

bearbeiten : als @MrYoshiji Kommentare, verwenden true statt :true etc

3

Sind Sie sicher, dass Sie Symbole verwenden :true und :false da?

Ich möchte checked glauben, ein boolean Feld und boolean Äquivalente in Ruby sind true und false zu sein.

Verwandte Themen