【发布时间】:2012-02-26 15:50:45
【问题描述】:
我有一个模型,它有许多其他模型,但这个模型只需要 10 个或更少的 id。
假设它有,浴室、厨房、客厅(为了争论),新记录可能永远不需要更改。
制作这样一个不使用数据库表的模型的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 models
我有一个模型,它有许多其他模型,但这个模型只需要 10 个或更少的 id。
假设它有,浴室、厨房、客厅(为了争论),新记录可能永远不需要更改。
制作这样一个不使用数据库表的模型的最佳方法是什么?
【问题讨论】:
标签: ruby-on-rails ruby ruby-on-rails-3 models
这可能不是最佳实践,但为了解决同样的问题,我刚刚在我的模型中指定了一个集合,如下所示:
ROOM_TYPES = [ "Bathroom", "Living Room", "Kitchen" ]
然后在视图中:
<%= f.select(:room_type, Project::ROOM_TYPES, {:prompt => '...'}) %>
(将Project 替换为您的实际型号名称。)
超级简单,几乎没有设置。我可以看到它是多么难以维护,因为没有访问 Rails 代码就无法添加项目,但它确实可以快速完成工作。
【讨论】:
即使行的集合永远不会改变,将其作为数据库中的表来利用 ActiveRecord 关系仍然很有用。一个不太人为的例子是一个包含美国各州列表的数据库表。这极不可能改变,并且可能只有几列(州名和州缩写)。但是,通过将这些存储在数据库中并使用 ActiveRecord 支持它们,您可以保留执行便捷操作的能力,例如使用传统的 Rails 语义搜索处于某个状态的所有用户。
话虽如此,另一种方法是简单地创建一个类,将其粘贴在不从 ActiveRecord 继承的模型目录中,然后在应用程序加载时从数据库中填充一次,或者简单地手动填充它.
昨天有人问了一个类似的问题,其中一个答案提出了一种机制来支持类似于你想做的事情:
How to create a static class that represents what is in the database?
【讨论】: