Rails 3.2.6 アプリには、'version' という名前のモデル属性があり、インスタンスが (トリガーを介して) 作成または更新されるたびに、データベース レベルでインクリメントされます。ただし、作成または更新が成功した後、明示的に instance.reload を実行しない限り、データベースによって設定された新しい値はインスタンスに返されません。
データベースに永続化した後、アクティブなレコードがインスタンスを自動的にリロードする方法を知っている人はいますか?
バックグラウンド
Rails 3.2.6 アプリには、それぞれ「バージョン」列を持つ 3 つのテーブルがあります。3 つのテーブルすべてで、挿入と更新のたびに「バージョン」整数列をインクリメントする必要があり、「バージョン」は決して繰り返されてはなりません。
簡単な解決策: 3 つのテーブルすべてが共有する version_sequence を postgres に作成しました。これらのテーブルのレコードのバージョン列を nextval('version_sequence') 値で更新する小さなトリガーがあります。
-- Resource Version Sequence
CREATE SEQUENCE resource_versions_seq;
-- Resource Version Trigger
CREATE FUNCTION update_resource_version() RETURNS trigger AS $update_resource_version$
BEGIN
NEW.version := nextval('resource_versions_seq');
RETURN NEW;
END;
$update_resource_version$ LANGUAGE plpgsql;
ただし、active_record で属性を作成、保存、または更新すると、レコードが永続化された後に新しい「バージョン」値が再ロードされません。