Ruby on rails 在Rails中将状态值建模为关联的正确方法是什么?

Ruby on rails 在Rails中将状态值建模为关联的正确方法是什么?,ruby-on-rails,has-many,belongs-to,Ruby On Rails,Has Many,Belongs To,我有一个叫Contacts的模型 联系人可以有不同的状态“坏的、积极的、错误的…” 这些状态可能需要随着时间的推移而改变,但在所有联系人中,它们都是相同的选项 我应该这样建模吗: Contacts.rb belongs_to :status_contact StatusContacts.rb has_many :contacts 然后手动填充表中的状态类型 然后,我想使用Ajax单击与某个值相对应的按钮来更新联系人的值。看起来您正试图确保您的状态值始终限于您选择的一组可能答案。如果这就是你

我有一个叫Contacts的模型

联系人可以有不同的状态“坏的、积极的、错误的…”

这些状态可能需要随着时间的推移而改变,但在所有联系人中,它们都是相同的选项

我应该这样建模吗:

Contacts.rb

belongs_to :status_contact

StatusContacts.rb
has_many :contacts
然后手动填充表中的状态类型


然后,我想使用Ajax单击与某个值相对应的按钮来更新联系人的值。

看起来您正试图确保您的状态值始终限于您选择的一组可能答案。如果这就是你想要做的,那就没有特别需要一张单独的桌子了。您可以在这里使用ActiveRecord验证的魔力

首先,为联系人创建一个名为:status的字符串数据库列

然后,您可以使用验证来确保这些值仅限于您想要的值。在Rails 3中,您可以这样做:

validate :status, :inclusion => { :in => %w( bad positive wrong ) }
(如果您使用的是Rails 2,请改为使用#验证_包含_)


在ActiveRecord中,保存前验证检查对象的值是否有效;在所有验证通过之前,它拒绝将对象保存到数据库中。

您的命名让我觉得有点奇怪-
ContactStatus
对我来说听起来有点好,但我认为这是实现您想要的目标的一般想法。

还没有明确的答案---我认为我需要使用该表,因为它允许用户添加和修改其应用程序中使用的状态类型。

-1如果它们随着时间的推移而改变,并且需要在所有联系人中改变,则她需要一个单独的表来存储它们。我猜她的意思是,可能的值集可能会随着时间的推移而改变。如果我没有读错的话,添加一个单独的表来限制字符串字段的值对于这个问题来说是不恰当的。也许你是对的,尽管它仍然不能回避这样一个事实:如果50个联系人是“积极的”,并且“积极的”被删除或更改,那么这50个联系人仍然是“积极的”.理论上是这样的。根据我的经验,大多数时候你只是不断地在列表中添加更多可能的值。无论如何,我不认为每次需要一个只允许几个可能值的字符串列时都添加一个新表是一种可持续的做法。我同意你的看法。我认为您不应该一直为归结为字符串列的内容添加表。我认为这个问题的关键区别在于,它们是否随着时间的推移而改变,而您需要同时更改所有实例。否则,你将要写一个脚本,将去做它为你。。。这完全是一个选项:PI有ContactStatus,但因为我有其他状态,我认为可能需要单独的模型(重新思考这个),我希望能够以字母顺序查看所有状态。。。。