Ruby on rails Rails相当于Django的“选择”

Ruby on rails Rails相当于Django的“选择”,ruby-on-rails,html-select,Ruby On Rails,Html Select,我知道Rails中没有真正的等价物,但我的问题主要是关于最佳实践 在Django中,如果希望将模型字段限制为有限的一组选项,可以在模型中执行以下操作: COLOR_CHOICES = (('B', 'Blue'), ('R', 'Red')) item_color = models.CharField(choices=COLOR_CHOICES) 从我对Rails的基本理解来看,我可以实现类似的功能,例如,在表单中使用select标记来添加/编辑该模型 然而,我的问题是,在哪里再次声明选项哈希

我知道Rails中没有真正的等价物,但我的问题主要是关于最佳实践

在Django中,如果希望将模型字段限制为有限的一组选项,可以在模型中执行以下操作:

COLOR_CHOICES = (('B', 'Blue'), ('R', 'Red'))
item_color = models.CharField(choices=COLOR_CHOICES)
从我对Rails的基本理解来看,我可以实现类似的功能,例如,在表单中使用select标记来添加/编辑该模型

然而,我的问题是,在哪里再次声明选项哈希是合适的?我猜我需要的是哈希?。基本上,我只是希望它能够以任何形式轻松重用,在这里我可能需要展示这些选择,并且在模型级别进行验证


如有任何帮助/提示,将不胜感激

在验证方面,可能验证了您所需要的内容:

class Coffee < ActiveRecord::Base
  validates_inclusion_of :size, :in => %w(small medium large),
    :message => "%{value} is not a valid size"
end
至于生成助手,您可以尝试以下操作:

class Coffee < ActiveRecord::Base
  @@coffe_size = %w(small medium large)

  validates_inclusion_of :size, :in => @@coffe_size,
    :message => "%{value} is not a valid size"

   def self.coffee_size_options
       @@coffe_size.map{ |z| [z,z]} 
   end
end
然后在某个助手中:

<%= select(:coffee, :size, Coffee.coffee_size_options) %>

2年后,有了一个更好的选择:价值观

class Car < ActiveRecord::Base
  attr_accessible :brand
  values_for :brand, :has=>[:ford, :chevy, :dodge], :add=>[:constants]

  def doStuff
    # Now you can...
    Car.brands # [:ford, :chevy, :dodge]
    Car::BRAND_FORD # "ford"
    myCar = Car.new(:brand=>Car::BRAND_FORD)
    myCar.valid? # true
    myCar.brand= "duck."
    myCar.valid? # false
  end
end

您可以简单地使用enum

class Coffee < ActiveRecord::Base
  enum color: [ :blue, :red, :green ]
end

此处的更多信息:

您可以链接到该方法的文档吗?看起来很棒,但我的谷歌浏览器让我失望了。