我目前正在使用(或尝试使用)查找表来表示包含枚举字符串的列。我与我的团队进行了广泛的讨论,以确保这是我们想要的方向,并决定继续下去,但不幸的是,我们中没有人知道如何使用迁移将查找表绑定到列,以及是否必须在模型/控制器/视图中进行更改以支持这种新行为。
我已经在谷歌上搜索了很多,但还没有找到这样做的好例子,所以我希望有人能告诉我一个很棒的链接,指向我在搜索中刚刚错过的一个教程,或者描述一下如何做到这一点。我也很想知道是否有一个非官方(或官方)的铁路模式。
提前谢谢。
发布于 2011-08-10 13:35:18
我遇到了与您相同的问题,并通过创建一个gem来解决它,该gem将一个动态查找表透明地添加到模型中。我在这里写了一篇博文:http://www.codelord.net/2011/08/09/guest-post-lookup-tables-with-ruby-on-rails/
发布于 2011-01-28 18:11:11
如果您正在寻找一种轻量级的方法来对枚举/配置进行建模,而无需创建单独的表,那么一定要查看ActiveHash:
发布于 2021-04-27 11:18:11
我知道这是一个古老的问题,但由于它仍然是谷歌上最热门的,我想我应该分享我的解决方案,它被包装成宝石。看一看https://github.com/blackrat/acts_as_enumeration
从自述文件中:
因此,如果数据库表有一个名为"name“的列,则声明
acts_as_enumeration :名称
将选择该列中的所有项,并在散列中将它们映射到它们的主键值。
此外,它还创建实例方法is_#{ key },其中key是该列中的所有值,is?(数组)和is_not?(数组)检查该数组中的类型。
保持name作为我们的列示例,类方法id_for_name将返回该映射的主键值,valid_name?(值)将表示表是否包含具有该值的name列中的and条目。
最后,方法缺失允许方法的is_和is_not链接,例如is_paul_or_michael_or_luke?其效果与(is_paul?|| is_michael?|| is_luke?)或者是?(:paul,:michael,:luke)和is_not_paul_or_michael_or_like,效果与!(is_paul || is_michael?|| is_luke?)或者!是?(:paul,:michael,:luke)
注意:由于method_missing使用的机制,如果有人的名字实际上是"not bruce",组合查询不能将其用作第一个元素。即“不”不仅仅是“不是布鲁斯”。
那么is_not_bruce_or_paul的组合呢?一定要写成is_paul_or_not_bruce吗?以达到预期的效果。is_not_not_bruce_or_paul很好,但发生这种情况的可能性就像在Monty Python素描之外有人实际称为“不是布鲁斯”一样。
(这意味着它可能会支持,所以在更改代码以支持新条目之前,尝试只更改顺序)
https://stackoverflow.com/questions/4828568
复制相似问题