0

データベース内のレコードを更新する必要があるレーキ タスクがありますが、役に立ちません。rake から呼び出すと動作が異なりますか?

これが私が持っているものです。エラーなしで実行されますが、データベースのレコードは更新されません

task :remove_vintage_from_slugs => :environment do
 wine = Wine.find_by_id(22)
 wine.slug = "new value"
 wine.save
end

アップデート

wine.save! true を返しますか?
1.9.2-p318 :001 > wine = Wine.find_by_id(23) 1.9.2-p318 :002 > wine.slug = "test" 1.9.2-p318 :003 > wine.save! =>真

4

1 に答える 1

1

2つのこと:

  1. デフォルトでは、常に検証を実行して保存します。それらのいずれかが失敗した場合、アクションはキャンセルされ、save は false を返します。ただし、:validate => false を指定すると、検証は完全にバイパスされます。

  2. 保存に関連する一連のコールバックがあります。before_* コールバックのいずれかが false を返す場合、アクションはキャンセルされ、保存は false を返します。

コンソールで何らかの理由で保存が false を返すかどうかを確認します。さらに良いのは、save を使用することです。(強打で)。セーブ付き!検証は常に実行されます。それらのいずれかが失敗した場合、 ActiveRecord::RecordInvalid が発生します。

于 2012-11-15T07:19:47.983 に答える