gpt4 book ai didi

ruby-on-rails - Rails 全局枚举?

转载 作者:行者123 更新时间:2023-12-03 15:12:48 24 4
gpt4 key购买 nike

我的数据库模式中有项目是整数,并设置为与项目相关的特定数字。例如,名为 appointment_type 的列可以具有 0=Unknown、1=Medical、3=Trial 等的值集……我不想在我的 Rails 代码中使用魔数(Magic Number),而更喜欢类似 Enum 的解决方案使代码更具可维护性和可读性。此外,不止一个表具有此 appointment_type 列,因此我希望也能够使用“枚举”来寻址其他列。

我想拥有一个像 item 这样的全局枚举,因为我需要在我的模型、 Controller 和 View 中访问它。我可能不太可能需要在我的模型中访问它,但肯定是在 Controller 和 View 中。

有什么好的方法可以解决这个问题吗?

最佳答案

It may be less likely that I need to access it in my model, but definitely within the controller and view.

你确定吗?当您谈论数据库和模式时,您就是在谈论应用程序的模型部分。我认为存储这些变量的最佳位置是使用它们的模型。

如果这些变量属于单个模型,您可以将它们直接存储在模型本身中:

class Item < ActiveRecord::Base
STATUS_UNKNOWN = 0
STATUS_MEDICAL = 3
end

然后就可以引用模型作用域内外的值了

class Item
def my_method
STATUS_UNKNOWN
end
end

Item::STATUS_UNKNOWN # => 0
Item.new.my_method # => 0

当存在值的枚举时,Rubyists 通常使用散列或数组。

class Item
AVAILABLE_STATUSES = { :unkwnown => 0, :medical => 3 }

def self.statuses
self.AVAILABLE_STATUSES.keys.sort
end

def self.status_value(key)
self.AVAILABLE_STATUSES[:key]
end

end

Item::AVAILABLE_STATUS # => { :unkwnown => 0, :medical => 3 }
Item.statuses # => [:medical, :unkwnown]
Item.status_value(:medical) # => 3

如果多个模型共享相同的逻辑,您可以将其放在一个模块中,并将该模块混合在所有需要它的模型中。

关于ruby-on-rails - Rails 全局枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1179570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com