当前位置:  开发笔记 > 后端 > 正文

在rails 3.1中存储模型特定常量的最佳位置?

如何解决《在rails3.1中存储模型特定常量的最佳位置?》经验,为你挑选了2个好方法。

我在名为user的模型中有一个字段类型,它是db中的int.int的值指定它的存储类型.例:

0 =妈妈

1 =爸爸

2 =祖母

等等

我有其他几个这样的领域,所以创建关联表是过分的.

不是在模型和控制器逻辑中的条件语句中检查那些int值,而是在rails中存在这些常量来存储这些常量.

所以我可以从模型和控制器中做到这一点?

if myuser.type == MOM
elsif myuser.type == GRAND_MOTHER

编辑:解决方案我最后一起去了:

在模型中:

  # constants
  TYPES = {
    :mom => 0,
    :dad => 1,
    :grandmother => 2,
    :grandfather => 3
  }

在逻辑上:

if u.type == User::TYPES[:mom]

即使它更长,我觉得当他们阅读我的代码时,对其他开发人员来说更直观.感谢下面的Taro这个解决方案.



1> taro..:

就像是:

class User < ActiveRecord::Base

  TYPES = %w{ mom dad grandmother grandfather son }

  TYPES.each_with_index do |meth, index|
    define_method("#{meth}?") { type == index }
  end

end


u = User.new
u.type = 4
u.mom? # => false
u.son? # => true


将常量放在类中,并将其称为"User :: MOM".
作为解决方案的一部分,"do meth"为+1.

2> Ollie Bennet..:

从Rails 4.1开始,支持ActiveRecord :: Enum.

有一个有用的教程在这里,但是在短:

# models/user.rb
class User < ActiveRecord::Base
  enum family_role: [ :mum, :dad, :grandmother]
end

# logic elsewhere
u = User.first
u.family_role = 'mum'
u.mum? # => true
u.family_role # => 'mum'

注意:要从当前方案(数据库已存储与值对应的数字)进行转换,应使用哈希语法:

enum family_role: { mum: 0, dad: 1, grandmother: 2 }

我还建议您保留0默认状态,但这只是一个约定而不是关键.

推荐阅读
李桂平2402851397
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有