Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在Neo4j这样的图形数据库中实现enum?_Ruby On Rails_Enums_Neo4j_Nosql - Fatal编程技术网

Ruby on rails 如何在Neo4j这样的图形数据库中实现enum?

Ruby on rails 如何在Neo4j这样的图形数据库中实现enum?,ruby-on-rails,enums,neo4j,nosql,Ruby On Rails,Enums,Neo4j,Nosql,我想为Neo4j实现一个enum class Conversation < ActiveRecord::Base enum status: [ :active, :archived ] end 类对话

我想为
Neo4j
实现一个
enum

class Conversation < ActiveRecord::Base
  enum status: [ :active, :archived ]
end
类对话

如何在Neo4j中实现这一点?

Neo4j的
gem还不支持这一点,但我认为这可能是一个好主意。如果您同时需要它,您可以实现一个
关注点
,您可以
将其包含到您的模型中


我还提出了一个问题来建议实现这一点:
neo4j
gem还不支持这一点,但我认为这可能是一个好主意。如果您同时需要它,您可以实现一个
关注点
,您可以
将其包含到您的模型中


我还创建了一个问题来建议实现此功能:

感谢Brian Underwood的建议。我通过在
lib/enum\u attr.rb
中创建一个模块来实现此解决方案

我有一个模型
user.rb
,其中我必须实现enum,因此我创建了类似的
enum\u attr
方法

  class User
    enum_attr status: [ :active, :archived ]
  end
添加模块
lib/enum\u attr.rb

  module ClassMethods
    def enum_attr(attr_list)
      attr_list.each do |list|
        enum_name, enum_data = list.first, list.second

        enum_data.each_with_index do |method_name,value|
          define_method("#{method_name}?") do
            enum_value = self.send(enum_name)
            enum_value.nil? ? false : enum_data[enum_value] == method_name
          end

          define_method("#{method_name}!") do
            self.write_attribute(enum_name, value)
            self.save
          end
        end
      end
    end
  end
说明:

我添加了两个方法。第一个方法设置值

user = User.first
user.active! # sets the user to active with value 0 
第二个返回一个布尔方法,该方法检查它处于哪个状态

user.active? # returns true/false as per the result
user.archived? #returns false if it it set to active

感谢Brian Underwood的建议。我通过在
lib/enum\u attr.rb
中创建一个模块实现了解决方案

我有一个模型
user.rb
,其中我必须实现enum,因此我创建了类似的
enum\u attr
方法

  class User
    enum_attr status: [ :active, :archived ]
  end
添加模块
lib/enum\u attr.rb

  module ClassMethods
    def enum_attr(attr_list)
      attr_list.each do |list|
        enum_name, enum_data = list.first, list.second

        enum_data.each_with_index do |method_name,value|
          define_method("#{method_name}?") do
            enum_value = self.send(enum_name)
            enum_value.nil? ? false : enum_data[enum_value] == method_name
          end

          define_method("#{method_name}!") do
            self.write_attribute(enum_name, value)
            self.save
          end
        end
      end
    end
  end
说明:

我添加了两个方法。第一个方法设置值

user = User.first
user.active! # sets the user to active with value 0 
第二个返回一个布尔方法,该方法检查它处于哪个状态

user.active? # returns true/false as per the result
user.archived? #returns false if it it set to active

Neo4j驱动程序现在支持枚举,因此您可以执行以下操作:

class Media
  include Neo4j::ActiveNode

  enum type: [:image, :video, :unknown]
end

media = Media.create(type: :video)
media.type
# => :video
media.image!
media.image?
# => true

有关更多详细信息,请参阅文档:

Neo4j驱动程序现在支持枚举,因此您可以执行以下操作:

class Media
  include Neo4j::ActiveNode

  enum type: [:image, :video, :unknown]
end

media = Media.create(type: :video)
media.type
# => :video
media.image!
media.image?
# => true

有关更多详细信息,请参阅文档:

我很失望,不知道为什么我会因此而投反对票。我真的面临着这个问题。有人能帮我解决这个问题吗。如果我无法正确解释问题,是否应该有人添加评论?我很失望,不知道为什么我会因此而投反对票。我真的面临着这个问题,有人可以吗帮我解决这个问题。如果我无法正确解释问题,是否应该有人添加评论?