这样-6ren">
gpt4 book ai didi

ruby-on-rails - Ruby on Rails 和类变量混淆

转载 作者:数据小太阳 更新时间:2023-10-29 08:46:53 27 4
gpt4 key购买 nike

我在 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/

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