我已经看到了保存用户的喜好两种不同的方法。
方法1:序列化他们的用户表的列的一个省
方法2:创建一个单独的表的喜好和做出的has_many关联来自用户的喜好。
你喜欢哪种,什么是各自的优点和缺点比其他上述两种方法中的一种?
我已经看到了保存用户的喜好两种不同的方法。
方法1:序列化他们的用户表的列的一个省
方法2:创建一个单独的表的喜好和做出的has_many关联来自用户的喜好。
你喜欢哪种,什么是各自的优点和缺点比其他上述两种方法中的一种?
它通常是有利于正常化是一个好主意。 第二个解决方案让您的车型更清洁,使得如果添加了新的偏好方便的可扩展性,并保持你的表整洁。
我努力解决同样的问题,所以我想我会分享我在“社区维基”的答案找到。
为您的Rails应用程序简单的用户喜好是描述如何做到这一点博客文章。
编辑在形成系列化哈希? 介绍了如何在一个表格编辑这样的哈希值。 一个有用的技巧是使窗体从OpenStruct.new(@user.preferences)
散列来自动为每个散列属性存取方法。
染料/ has_serialized - GitHub上让你把在序列化哈希的属性上的(用户)模型的属性。
最佳实践来存储用户设置? 有一些提示。 下面是一些库其中包括两个由@hopeless另一个答案。
您也可以尝试使用元编程: 实用的元编程和Ruby:存储偏好设置
第一种方法的改进版本,可如果你对PostgreSQL的9.2 / 3 +和Rails可以了4+。 您可以使用store_accessor
在一个PostgreSQL hstore列来存储的偏好与验证和查询的支持。
class User
store_accessor :preferences, :receive_newsletter
validates :receive_newsletter, presence: true
end
user.receive_newsletter => 'true'
User.where("preferences->'receive_newsletter' = 'true'")
见http://mikecoutermarsh.com/using-hstore-with-rails-4/更多细节(迁移)和处理布尔特别说明。
方法2
您可以添加的喜好,不会搞乱用户表
有一些Rails插件来处理这个用例。
我会接近2,因为它是更清洁和更容易更新。 您将能够选择要添加更多的偏好一样复杂。
这将是一个慢一点,因为你有一个连接的事,但它会是值得的
在2016年,我将支持选项2。
用户设置往往会成为一个核心部分每一个应用程序的。 如果他们是在每次请求检索到的,你现在让每个请求额外查询。 使用一个单独的表是有道理的,当你必须有每个设置单独的列。 但是,由于我们使用jsonb,这不是一个问题。 这只是一列。
阅读更多