2016-04-11 13 views
-3

私はユーザーからデータを取り込むアプリケーションを持っていますが、すべて正常に動作しています。私はいくつかのデータが存在する場合、スコアが上がるモデルでスコアを構築しようとしています、と私はこのような何かしようとしています:ここで何かが本当であればスコアを計算する

def score 
score = 0 
if self.moving = true 
    score += 5 
end 
end 

を自分のフォームと「移動」列がブール値です。

私はこれをしようとすると、それが真であるとき、「はい」のスコアが5追加されましたが、私がfalseに変更した場合、私はスコアが戻ってダウンしている元のスコアに行ってみたい何が起こる
<div class="field"> 
    <%= f.select :moving, [['Yes', true], ['No',false]], {}, :class => 'form-control' %> 
</div> 

建てられた。

また、スコアはデータベースに作成された列に保存する必要があります。私はself.scoreを使用しようとしましたが、動作していませんか?

前もって助けてくれてありがとうございます。代わりの

+0

あなたは 'if moving == true'が必要です。二重等号に注意してください。または単に移動している場合 –

+0

'self_oving == true update_attributes(score:score + 5)end' - 試してください – dp7

+0

ありがとうございます '==' not '=' –

答えて

1

あなたは割り当ての戻り値がtrueであるため、これは常に場合はブロックを実行します(単一等号)

if moving = true 
    puts "moving" 
end 

を割り当てる)

代わりに、あなたは)二重の等号(比較する必要があり

if moving == true 
    puts "moving" 
end 

これはまだブール値を別のブール値と比較し、この比較結果をifcうんざり。これは、ビットのようになります。

if moving 
    puts "moving" 
end 
をあなたも文の改質剤としてであれば使用することができます:

result = moving == true 
if result 
    puts "moving" 
end 

代わりに、あなただけ書くことができますブール値を返す

puts "moving" if moving 

メソッドをしています通常は "?"

def moving? 
end 
1

あなたが使用された条件は=使用の場合で==

if self.moving == true 
score += 5 
end 
1

あなたは間違って比較している、好きなことを試してみてください。=として

def score 
score = 0 
if self.moving == true 
    score += 5 
end 
end 

割り当てのために使用され、真の割り当てされます毎回属性に追加しますが、値を==と比較するだけです。

+0

おそらく、彼は質問に基づいて他の部分を必要としません。 –

関連する問題