Rails:维护依赖于应用程序的数据
Rails: maintaining application-dependent data
在我的应用程序中,account
有各种需要向用户显示的独特消息 (message_templates
)。例如,在创建新 post 时,在一个帐户中,他们可能会显示 "Thanks for creating the post!" 而另一个帐户可能想说 "The post was successfully created!".
有一定数量的应用内 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
并且我需要确保为所有当前帐户创建此模板。
我正在考虑使用 Rails 迁移来确保每个 account
都有不同的 message_templates
但迁移实际上是针对数据库架构更改而不是应用程序数据更改。
我也看过 rake db:seed
,但这实际上是为了最初播种数据库,而不是为了维护更新。
一个解决方案是创建 rake 任务,每当我添加新的模板化消息时,我都会手动执行这些任务。看起来有点笨重。
我真正想要的是为数据构建的迁移。这似乎是一个常见问题,是否有实现此标准的方法?否则我可能最终会写一个实现数据迁移的 gem。
您可以像在种子文件中一样在迁移中创建数据,例如:
def up
Account.each do |account|
MessageTemplate.create(account: account, slug: "post_created_thank_you", body: "Thank you for creating the post!")
end
end
def down
MessageTemplate.where(slug: "post_created_thank_you").delete_all
end
或者更好的想法是将上面的内容变成 SQL 插入,这样它运行得更快...
在我的应用程序中,account
有各种需要向用户显示的独特消息 (message_templates
)。例如,在创建新 post 时,在一个帐户中,他们可能会显示 "Thanks for creating the post!" 而另一个帐户可能想说 "The post was successfully created!".
有一定数量的应用内 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
并且我需要确保为所有当前帐户创建此模板。
我正在考虑使用 Rails 迁移来确保每个 account
都有不同的 message_templates
但迁移实际上是针对数据库架构更改而不是应用程序数据更改。
我也看过 rake db:seed
,但这实际上是为了最初播种数据库,而不是为了维护更新。
一个解决方案是创建 rake 任务,每当我添加新的模板化消息时,我都会手动执行这些任务。看起来有点笨重。
我真正想要的是为数据构建的迁移。这似乎是一个常见问题,是否有实现此标准的方法?否则我可能最终会写一个实现数据迁移的 gem。
您可以像在种子文件中一样在迁移中创建数据,例如:
def up
Account.each do |account|
MessageTemplate.create(account: account, slug: "post_created_thank_you", body: "Thank you for creating the post!")
end
end
def down
MessageTemplate.where(slug: "post_created_thank_you").delete_all
end
或者更好的想法是将上面的内容变成 SQL 插入,这样它运行得更快...