你通常把哪些类型放在铁轨上?

时间:2010-07-03 10:48:35

标签: ruby-on-rails types

这不是博客文章,这是一个问题!
说到类型我的意思是我们有类型值和类型描述。我们可以有不同的类型(性别,大小,颜色等)和每种类型的值集合。 我们有两种选择:将类型保存在数据库或应用程序中 对于我来说,保持整个表的每种类型的存储类型值是多余的。另一种方法是将类型存储在具有字段的单个表中:类型名称,类型值,类型描述。 如果要从应用程序修改其值,则保持db中的类型有用。但主要是当我添加新类型时,我正在改变应用程序行为 对我来说,更好的选择是保持应用类型。我有像这样的YML配置文件(实际上它是SettingsLogic设置文件的一部分):

types:
  gender: "male female"

这样做我可以验证表单输入:

validates_inclusion_of :gender, :in => Settings.types.gender.split(/\s/)

就我的应用程序是多语言而言,我会在本地化文件中保留描述:

ru:  
  types:
    gender: 
      male: "Мужской"
      female: "Женский"

要准备选择的集合,我使用这个辅助方法:

def genders
  genders = []
  Settings.types.gender.split(/\s/).each do |gender|
    genders << [t("types.gender.#{gender}"), gender]
  end
  genders
end

这种方法的缺点是我必须保留db long类型值 male female 而不是足够的 m ˚F
所以我现在考虑哈希:

def genders
  genders = []
  gender_types = { :m => "male", :f => "female" }
  gender_types.each do |key, value|
    genders << [t("types.gender.#{value}"), key]
  end
  genders
end

但是现在我没有答案在哪里保持哈希,就像我在配置文件中使用字符串一样。正如我所提到的,这个哈希不仅可以从辅助方法访问,也可以在验证中访问。

所以问题很广泛:你如何保持类型?什么是最好或更好的方法?

1 个答案:

答案 0 :(得分:3)

我使用哈希做类似的事情:

class RealtyRequest < ActiveRecord::Base
   TYPOLOGY = { 'One' => 1, 'Two' => 2, 'Three' => 3 }

   def typology
     TYPOLOGY.invert[typology_id]
   end
 end

模型是一个真实的表,我存储一个整数值,然后我用方法得到字符串值。

使用集合进行选择时,可以使用散列:

<div class="field">
  <%= f.label :typology_id %><br />
  <%= f.select :typology_id, RealtyRequest::TYPOLOGY %>
</div>

欢呼声,

一个。