1

レコードが作成済みかどうかを一意のIDで確認したい。そうであれば、amount 属性に 1 を加えたいと思います。そうでない場合は、作成して amount 属性を 1 に設定します。

私はすでにこれを持っています:#@have = current_user.haves.create_or_update_by_id(params[:have])しかし、どのように金額を正しく設定するのかよくわかりません.

ありがとう

4

2 に答える 2

2

ActiveRecordのincrementメソッド(ドキュメント)を使用します。

@have = current_user.haves.find_or_initialize_by_id(params[:have])
@have.increment(:amount)
@have.save

nilの場合、amount属性をゼロに初期化し、渡された値を追加します(デフォルトは1)。nilでない場合は、属性値をインクリメントするだけです。

于 2012-07-27T15:01:05.000 に答える
1

おそらくこれを2つの操作に分割します。

@have = current_user.haves.find_or_initialize_by_id(params[:have]) do |h|
  h.amount = 0
end

@have.amount += 1
@have.save

最初のステートメントは、一意の ID でレコードを検索するか、提供された ID と金額を 0 に設定して新しいレコードを初期化します。ブロックは、検索ではなく初期化時にのみ実行されます。次に、元の状態に関係なく量を増やし、レコードをデータベースに保存します。

于 2012-07-27T14:56:05.510 に答える