这更像是一个风格问题,我想知道别人做了什么.
假设我的数据库中有一个名为“status”的字段,用于博客文章.我希望它有几个可能的值,例如“草稿”,“等待审核”和“发布”,仅作为示例.
显然,我们不希望每次都在这些神奇的值中“硬编码”,这不会是干的.
所以我有时做的是这样的:
class Post STATUS = { :draft => "draft",:awaiting_review => "awaiting review",:posted => "posted" } ... end
然后我可以编写稍后引用它的代码作为STATUS [:draft]或Post :: STATUS [:draft]等.
这项工作正常,但有一些我不喜欢的事情.
>如果你有一个拼写错误并调用类似STATUS [:something_that_does_not_exist]的东西它不会抛出错误,它只会返回nil,并且可能会在你注意到bug之前在数据库等中设置它
>它看起来不干净或ruby-ish写东西,如some_var == Post :: STATUS [:draft] …
解决方法
这是一个常见问题.考虑这样的事情:
class Post < ActiveRecord::Base validates_inclusion_of :status,:in => [:draft,:awaiting_review,:posted] def status read_attribute(:status).to_sym end def status= (value) write_attribute(:status,value.to_s) end end
您可以使用名为symbolize的第三方ActiveRecord插件来简化此操作:
class Post < ActiveRecord::Base symbolize :status end
原文地址:https://www.jb51.cc/ruby/267278.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。