在哪里举行重要名单

时间:2011-07-04 01:20:12

标签: ruby-on-rails ruby-on-rails-3

我的应用程序有许多选项列表,例如,管理项目所在的阶段 - 这些是用户从select列表中选择的选项。我有很多这样的问题,我遇到了组织问题,即在一个地方定义这些问题,以便系统保持干燥状态。

我还担心为了规范化而生成大量的多态表,这有时会使代码复杂化,而不会在实际价值方面增加太多。

你能给我一个例子,说明在哪里存储一些选项:1)一个字段可能的唯一选项,以及2)在系统范围内以任何形式提供吗?

3 个答案:

答案 0 :(得分:2)

我在这种情况下使用symbolize gem。您可以将字段选项存储为字符串,对模型值执行操作作为符号,使用i18n作为标签,甚至还有一组帮助程序可以根据选项构建select

此外,代码保持非常干净,因为您在模型本身上设置了可用选项。

检查出来:

https://github.com/nofxx/symbolize

以下是他们的文档中的示例:

class User < ActiveRecord::Base
  symbolize :gender, :in => [:female, :male], :scopes => true
  symbolize :so, :in => {
    :linux   => "Linux",
    :mac     => "Mac OS X"
  }, :scopes => true

  # Allow blank
  symbolize :gui,  :in => [:gnome, :kde, :xfce], :allow_blank => true

  # Don`t i18n
  symbolize :browser, :in => [:firefox, :opera], :i18n => false, :methods => true

  # Scopes
  symbolize :angry, :in => [true, false], :scopes => true

  # Don`t validate
  symbolize :lang, :in => [:ruby, :c, :erlang], :validate => false

  # Default
  symbolize :kind, :in => [:admin, :manager, :user], :default => :admin
end

答案 1 :(得分:1)

由于ActiveRecord不支持ENUMSET属性,这完全适合您所需要的,数据库方面,我认为最好的方法是将这些数据存储在一个常量,put在初始值设定项中(例如conf/initializers/constants.rb)。通过这种方式,您可以使用它们构建<select>标记并在模型中构建(例如使用validates :field, :inclusion => ALLOWED_VALUES)。如果将常量存储在应用程序控制器中,则无法在模型中访问它。

答案 2 :(得分:0)

在appcontroller中存储常量数组会解决您的问题吗?

class ApplicationController < ActionController::Base
    OPTIONS = ["option1", "option2", "etc"]
end