在Rails DB

时间:2016-03-29 18:20:48

标签: ruby-on-rails activerecord psql

我们说我有一项功能可以让用户从我的应用中删除他们的个人资料。但在他们离开之前,我要求他们填写他们离开的原因("太多电子邮件","不再使用该服务","其他& #34;等...)

我想在User模型的字段中存储离开的原因 - User#reason

我的问题是,在哪里/如何存储我列举的原因列表?我看到了一些选择,希望得到关于其他人使用的东西的建议,哪些是最常用的" Rails方式"去做吧。

  1. 以纯文本格式存储 - 如上所述,请在User#reason中存储原因。但是,每当我因某种原因更新特定的措辞时,我都必须修补所有现有的值。

  2. 静态配置表。创建一个名为Reason的静态表/模型并存储原因列表。然后,每个User模型将具有对reason_id的外键引用。问题是,由于外键依赖,我无法轻易删除原因。

  3. ActiveHash - 似乎是为了这种事情而制作的。内存中的哈希,其作用类似于ActiveRecord对象。但是,再一次,如果任何Id的更改(并且它们很容易因为它们存储在代码中而不是数据库中,而不是数据库中,并且我组织中的任何人都可以更改它们),那么它会使外键变得混乱在其他表中映射。

  4. 谢谢!

2 个答案:

答案 0 :(得分:0)

听起来你需要一个连接表,比如UsersReasons,它有两个外键,user_id和reason_id。然后你有一个由一个原因表支持的Reason模型,所有东西都是用外键链接的。

看看Rails'有关如何连接模型的has_many_through文档:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

答案 1 :(得分:0)

假设我有UserReason模型。

我更倾向于使用user_reasonsUserReason作为列来说明user_idreason_id模型)的订单项表。

User可以has_one user_reason

&安培; Reason可以有has_many user_reasons

每次用户在选择退出前提供理由时,都会将其存储在user_reasons表格中。