私のアプリケーションでは、account
には、ユーザに表示する必要があるさまざまな一意のメッセージ(message_templates
)があります。たとえば、新しい投稿が作成されたときの1つのアカウントでは、「投稿を作成してくれてありがとう!」と表示されることがあります。別のアカウントで「投稿が正常に作成されました!」と言いたい場合があります。Rails:アプリケーション依存のデータを維持する
特定の時刻にのみトリガーされるこれらのインアプリのセット番号があります(message_templates
)。したがって、それぞれのアカウントは同じ数値で、値が異なります。
account = Account.create!
MessageTemplate.create(account: account, slug: "post_created_thank_you", body: "Thank you for creating the post!")
...
# Can change the body column but nothing else.
def PostsController < ApplicationController
def create
# create the post...
@thank_you_message = current_account.message_templates.find_by(
slug: "post_created_thank_you"
)
end
end
私はアプリケーションに機能を追加しているように、しかし、私は時々、私は別のmessage_template
を追加したいと私は、このテンプレートは、現在のすべてのアカウントのために作成されていることを確認する必要があることがわかります。
各account
には様々なmessage_templates
があることを確実にするためにRailsの移行を使用することを考えていましたが、移行は実際にはDBスキーマの変更であり、アプリケーションデータの変更ではありません。
私はrake db:seed
も見ましたが、これは実際に更新を維持するためではなく、最初にDBをシードするためのものです。
1つの解決策は、新しいテンプレート付きメッセージを追加するたびに手動で実行するレーキタスクを作成することです。ちょっと不器用だと思う。
私が本当に好きなのは、データ用に構築された移行です。これは一般的な問題のようですが、これを実装する標準的な方法はありますか?さもなければ、私はおそらくデータの移行を実装する宝石を書くことになります。
私はデータを移行自体に入れることができると知っていますが、私はそれをしないことを推奨している人が多くいます。移行はビジネスロジック(データ)を持ち、コアアプリの機能私はあなたがお勧めしたものをまさにやり遂げることをおもしろいですが、最初によりクリーンなアプローチがあるかどうかを見たいと思っていました。 –
あなたが何をしていても、あなたはまだデータを持っています...そして、それをあなたのprod dbに移すためにはまだ移行の中で実行する必要があります。それ以外の解決策は、その事実の難読化です。ケーキをスライスする他の方法もありますが、それらはすべて「私はマイグレーションを実行し、dbにデータを入れるものを実行します」 –