Rails:存储用户设置的最佳做法?

我想知道存储用户设置的最佳方法是什么? 对于Web 2.0应用程序,我希望用户能够选择某些设置。 目前只是在接收电子邮件通知时。

最简单的方法是创建一个模型“设置”,并为每个设置都有一个列,然后与用户建立1-1关系。

但是有更好的解决方案吗? 将信息存储在用户表本身中可能更好吗? 或者我应该使用带有“settings_name”和“settings_value”的表格来完全打开存储在那里的设置类型(在添加选项时不必运行任何迁移)?

你有什么意见?

谢谢

我们使用名为HasEasy的有用插件。 它将数据存储在垂直表中,但允许您添加validation,前/后存储处理,类型等。

如果您使用PostgreSQL,最好的解决方案是使用https://github.com/diogob/activerecord-postgres-hstore/ 。 这是一种在数据库中存储哈希的简单,快速和可靠的方法。 由于它不仅仅是一个序列化的文本字段,您也可以在其上进行搜索,而不需要像在HasEasy中那样创建新表。

def User serialize :preferences, ActiveRecord::Coders::Hstore end user = User.create preferences: { theme: "navy" } user.preferences['theme'] 

“开放”表方法使得难以使用AR进行建模,因为您必须担心数据类型(布尔值,整数,字符串等)。 我总是在用户表上添加prefs作为列,然后将它们移出到user_preferences表,如果它们“太多”的话。 它很简单,而且很容易使用。

如果用户设置无法查找(例如,通过User.find_by_x_preference),您还可以将它们作为哈希存储在序列化列中。 实际上,这是rails docs( http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M002334&name=serialize# )中描述的用例。

 class User < ActiveRecord::Base serialize :preferences end u = User.new u.preferences = {:favorite_color => "green", :favorite_book => "Moby Dick"}