我正在开发一个传统的Rails 3.2应用程序,它有很多用户可以管理的设置。设置与系统中的3种模型相关联:User
,Company
和CompanyUser
。为了避免每次添加新类型的设置时都必须编写数据库迁移
我基本上创建了一个键/值存储(每个设置为1行),它与上述每个模型都有多态关联。基类Setting
类处理所有常见功能,如设置键,关系等。每种类型的设置都扩展了基类,并且可以包含它自己的验证和/或逻辑。例如:
class Settings::EmailSignature < Setting
validates :whatever
end
对于任何需要设置的模型,我已经实现了has_setting
辅助方法,该方法设置关联并提供一些委托来直接获取和设置设置,而无需通过关联的模型对象,{ {1}}模型可能如下所示:
User
代码的这一面运行良好,但我遇到的问题是我为设置创建表单时。对于用户而言,将User,Company和CompanyUser设置以相同的形式混合在一起可能是有意义的。在这种情况下使用嵌套属性并不是一个好的解决方案,因为设置不相关且没有共同的父对象。我已经考虑过使用一个表单对象来处理将每个设置映射到正确的对象,但这并不是一个很好的选择,因为每个设置都需要知道它的id,相关的记录id和它的类型。在构建表单时,这不会特别容易管理。
我打算沿着自己的形式进行每个设置的路线,并在用户编辑每个项目时自动保存记录。这意味着一次只保存一条记录,这将使控制器层的操作变得更加简单,并且在分组设置方面提供了很大的灵活性。在我沿着这条路走下去之前,我想知道是否还有其他方法可以在一次交易中提交一份我可能忽略的单一表格?
请注意,此应用程序是用Rails 3.2编写的,并且现在不能轻松升级到Rails 4,因此任何解决方案都需要使用Rails 3.2。