我在 Rails 中有一个模型,它有一个枚举属性“status”。我想要一个公共(public)和私有(private)状态的概念,如下所示:
class Something < ActiveRecord::Base
@public_statuses = [:open, :closed, :current]
@private_statuses = [:deleted]
enum status: @public_statuses + @private_statuses
end
这样我就可以在 View 中执行以下操作:
<select>
<% Something.public_statuses.each do |status| %>
<option value="<%= status %>"><%= status.humanize %></option>
<% end %>
</select>
这样,我就不会向最终用户公开私有(private)状态。
不幸的是,我不太了解 Ruby 类,无论我是否使用 @public_statuses、@@public_statuses、public_statuses=[...] 等,都无法使其正常工作。我熟悉 Java 和其他 OO语言,但就是不知道如何使用 Ruby 在这里。
执行此操作的正确方法是什么?
最佳答案
您可以将变量视为类方法,并将您不希望被访问的变量定义为私有(private)(这在 Ruby 中并非绝对正确)。喜欢:
def self.public_statuses
[:open, :closed, :current]
end
def self.private_statuses
[:deleted]
end
private_class_method :private_statuses
但是如果你真的要使用变量,在本例中是常量,它非常相似:
PUBLIC_STATUSES = [:open, :closed, :current]
PRIVATE_STATUSES = [:deleted]
private_constant :PRIVATE_STATUSES
所以,你可以使用它:
puts Something::PUBLIC_STATUSES
=> [:open, :closed, :current]
puts Something::PRIVATE_STATUSES
NameError: private constant Client::PRIVATE_STATUSES referenced
关于ruby-on-rails - Ruby on Rails 和类变量混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25277775/