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
有关更多详细信息,请参阅文档:我很失望,不知道为什么我会因此而投反对票。我真的面临着这个问题。有人能帮我解决这个问题吗。如果我无法正确解释问题,是否应该有人添加评论?我很失望,不知道为什么我会因此而投反对票。我真的面临着这个问题,有人可以吗帮我解决这个问题。如果我无法正确解释问题,是否应该有人添加评论?