Kam*_*i81 26 validation activerecord ruby-on-rails
我目前有一个模型Attend将有一个状态列,这个状态列只有几个值.STATUS_OPTIONS = {:yes,:no,:maybe}
1)我不确定在用户插入Attend之前我如何验证这一点?基本上是java中的枚举,但我怎么能在rails中做到这一点?
bar*_*ett 65
现在Rails 4.1包含枚举,您可以执行以下操作:
class Attend < ActiveRecord::Base
enum size: [:yes, :no, :maybe]
# also can use the %i() syntax for an array of symbols:
# %i(yes no maybe)
validates :size, inclusion: { in: sizes.keys }
end
Run Code Online (Sandbox Code Playgroud)
然后为您提供一个范围(即:Attend.yes,Attend.no,Attend.maybe为每一个检查方法看,如果某些状态设置(即:#yes?,#no?,#maybe?),以及属性setter方法(即:#yes!,#no!,#maybe!).
mne*_*son 36
创建所需选项的全局可访问数组,然后验证状态列的值:
class Attend < ActiveRecord::Base
STATUS_OPTIONS = %w(yes no maybe)
validates :status, :inclusion => {:in => STATUS_OPTIONS}
end
Run Code Online (Sandbox Code Playgroud)
然后,您可以通过访问可能的状态 Attend::STATUS_OPTIONS
小智 11
这是我在Rails 4项目中实现的方式.
class Attend < ActiveRecord::Base
enum size: [:yes, :no, :maybe]
validates :size, inclusion: { in: Attend.sizes.keys }
end
Run Code Online (Sandbox Code Playgroud)
Attend.sizes为您提供映射.
Attend.sizes # {"yes" => 0, "no" => 1, "maybe" => 2}
Run Code Online (Sandbox Code Playgroud)
您可以使用字符串列作为状态,然后使用:inclusion选项validates以确保仅获得期望的结果:
class Attend < ActiveRecord::Base
validates :size, :inclusion => { :in => %w{yes no maybe} }
#...
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23485 次 |
| 最近记录: |