ruby-on-rails - 你通常把类型放在 rails 的什么地方?

标签 ruby-on-rails types

这不是一篇博文,这是一个问题!
说到类型,我的意思是我们有类型值和类型描述。我们可以有不同的类型(性别、尺寸、颜色等)和每种类型的值集合。 我们有 2 个选择:将类型保留在数据库中或应用程序中。
对我来说,保留整个表来存储每种类型的类型值是多余的。另一种方法是将类型存储在具有以下字段的单个表中:类型名称、类型值、类型描述。 如果您想从应用程序修改其值,请保持数据库中的类型有用。但大多数情况下,当我添加新类型时,我正在改变应用程序行为。
对我来说,更好的选择是在应用程序中保留类型。我有这样的 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

这种方法的缺点是我必须在数据库中保留长类型值 malefemale 而不是足够的 mf.
所以我现在考虑哈希:

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

但是现在我还不知道把散列放在哪里,就像我在配置文件中处理字符串一样。正如我所提到的,这个散列应该不仅可以从辅助方法访问,而且也可以在验证中访问。

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

最佳答案

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

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

   def typology
     TYPOLOGY.invert[typology_id]
   end
 end

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

使用集合进行select时,可以使用hash:

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

干杯,

一个。

关于ruby-on-rails - 你通常把类型放在 rails 的什么地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3171234/

相关文章:

ruby-on-rails - 无论如何,是否可以使用 Active Admin 添加其他级别的菜单?

ruby-on-rails - 在 find_by_sql 中使用变量

haskell - 编写 Haskell 程序来对用命令式编程语言编写的程序进行类型检查

c++ - 如何在 C++ 中将复杂的<float>变量转换为 float ?

python - 使用 lxml 的 xml 文件中的属性类型

javascript - 我应该担心这个 422(不可处理实体)错误吗? ( rails 与设计)

types - 在 Swift 中将有符号转换为无符号

使用 where 嵌套函数定义中的 Haskell 范围

ios - 设计:iOS “Add to Home Screen”