2017-08-18 16 views
1

私はRailsで基本的な食料品リストアプリケーションを構築しています。各「項目」には、名前とチェックの2つのプロパティがあります。名前は単なる商品の名前です。 Checkedは、ユーザが食料品リストの項目を「チェックオフ」しているかどうかを示すはずです。ruby​​メソッドが期待どおりに動作しない

私はアイテムコントローラにこの問題に対処する簡単な方法を入れました。問題は、メソッドがfalseからtrueに変更されるだけであることです。それは元に戻ってアイテムのチェックを外すことはできません。これが唯一の真の会話に偽のために動作します

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 

:ここ

は私のアイテムコントローラの内部にある方法です。 ifステートメントの後半は機能していないようです。思考?

+4

'@ item.update(checked:[email protected]?)' - あなたのコードは 'true'や' false'の代わりに 'symbol'オブジェクトを実際に送信しているので動作しません。 'true'と' false'の前にあるセミコロンを削除してください。 – MrYoshiji

答えて

2

根本的な理由(多分#updateを使用して)わからないが、私はコーディングしようとしていることと思います。このようなより:

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 

...か...

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

編集:@MrYoshijiさんのように、:trueの代わりにtrueを使用してください。

3

:trueとの記号を使用してもよろしいですか?そこに?

私はcheckedをブール値フィールドとみなしたいと考えています。ルビーのブール値はtruefalseです。