Rails3アプリケーションに次のコードがあります。
def like
@suggestion = Suggestion.find(params[:id])
Suggestion.update_all("votes = (votes + 1)")
redirect_to suggestions_url
end
def dislike
@suggestion = Suggestion.find(params[:id])
Suggestion.update_all("votes = (votes - 1)")
redirect_to suggestions_url
end
動作していますが、現在の提案を更新するのではなく、すべてを更新しています。だから私はそれを次のように変更しました:
def like
@suggestion = Suggestion.find(params[:id])
@suggestion.update_all("votes = (votes + 1)")
redirect_to suggestions_url
end
def dislike
@suggestion = Suggestion.find(params[:id])
@suggestion.update_all("votes = (votes - 1)")
redirect_to suggestions_url
end
しかし、私は得る:
undefined method `update_all' for #<Suggestion:0x007f87c2b918a0>
それで私は試し@suggestion.update_attribute(:votes, '1')
ましたが、それは値をインクリメントする代わりに1にリセットします。
これを達成するための正しい方法は何ですか?現在の提案の整数(投票)を保存するたびに1ずつインクリメント/デクリメントしたいだけです。
私も運が悪かったので次のことを試しました:
def like
@suggestion = Suggestion.find(params[:id])
@suggestion.increment(:votes)
redirect_to suggestions_url
end