加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Ruby样式问题:使用不同的可能值存储哈希常量

发布时间:2020-12-16 21:33:59 所属栏目:百科 来源:网络整理
导读:这更像是一个风格问题,我想知道别人做了什么. 假设我的数据库中有一个名为“status”的字段,用于博客文章.我希望它有几个可能的值,例如“草稿”,“等待审核”和“发布”,仅作为示例. 显然,我们不希望每次都在这些神奇的值中“硬编码”,这不会是干的. 所以我
这更像是一个风格问题,我想知道别人做了什么.

假设我的数据库中有一个名为“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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读