0

ここに「鶏か卵か」の問題があります...

レコード ID (モデルの ID) と文字列で作成された一意のフィールドを持つモデルがあります。このフィールド (ハッシュ) の移行に :null=>false があるので... このハッシュは、たとえば before_validation を使用してオブジェクトを保存するときに自動的に生成される必要がありますが、問題は、ハッシュを作成するためにデータベースからの ID が必要ですが、オブジェクトが保存されるまでこの ID を持っていないことです...どうすればよいですかこれを解決しますか?これはすでに運用されているため、データベースの制限を変更するオプションではなく、ハッシュシードを変更するオプションでもありません.IDを使用する必要があります...

私が今行っていること (良い解決策ではないことはわかっています) は、ハッシュ フィールドにダミーを保存してレコードを保存することです。この後、ハッシュを作成してオブジェクトを再度保存します... しかし、これはコントローラとモデルにすべてのビジネス ロジックが必要です...

何か案が?

4

1 に答える 1

1

after_createモデルでを使用します。

after_create :generate_hash

... your model's code ...

private

def generate_hash
  # hash generation code goes here
  self.save
end

これにより、モデル内で行われることを除いて、コントローラーで行っているのと同じように、レコードが 2 回保存されます。

于 2012-10-09T20:44:03.530 に答える