Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/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 为什么在rails(mongoid)中没有解除作用域关联的简单方法?_Ruby On Rails_Ruby On Rails 4_Mongoid_Has And Belongs To Many_Soft Delete - Fatal编程技术网

Ruby on rails 为什么在rails(mongoid)中没有解除作用域关联的简单方法?

Ruby on rails 为什么在rails(mongoid)中没有解除作用域关联的简单方法?,ruby-on-rails,ruby-on-rails-4,mongoid,has-and-belongs-to-many,soft-delete,Ruby On Rails,Ruby On Rails 4,Mongoid,Has And Belongs To Many,Soft Delete,我试着在谷歌上搜索并阅读,但我找不到一个简单的解决方案,也找不到一个很好的答案。有许多类似的问题,解决人们的问题。我不知道如何解决我的问题,除此之外,我仍然想知道为什么还没有人解决这个问题。我认为这是一个非常普遍的问题 我使用的是Rails 4和Mongoid 4,带有Mongoid偏执狂。 我想为用户实现软删除。这很有效 然而,我有一个事件模型,它拥有并且属于许多用户,与之相反的是:nil 当我软删除一个用户时,该用户是事件的用户,那么我似乎无法找到一种默认情况下获取该用户的方法。由于已删除

我试着在谷歌上搜索并阅读,但我找不到一个简单的解决方案,也找不到一个很好的答案。有许多类似的问题,解决人们的问题。我不知道如何解决我的问题,除此之外,我仍然想知道为什么还没有人解决这个问题。我认为这是一个非常普遍的问题


我使用的是Rails 4和Mongoid 4,带有Mongoid偏执狂。 我想为
用户
实现软删除。这很有效

然而,我有一个
事件
模型,它
拥有并且属于许多用户,与之相反的是:nil

当我软删除一个用户时,该用户是事件的用户,那么我似乎无法找到一种默认情况下获取该用户的方法。由于
已删除的用户的默认作用域位于:nil
,因此不会获取软删除的用户

有人在那里启发吗

如何开始实现类似ActiveRecord提供的功能:

has_and_belongs_to_many :users, -> { *a defined scope* }

我不确定我是否完全理解您的意思,但不应该调用另一个使用
unscoped
的作用域来满足您的需要

编辑

啊,我明白了。这不是最优雅的方式,但如果您设置为不更改用户模型的
默认范围
;也许:

# Event model
def all_users
    User.unscoped.where(event: self)
end

你试过SCI方法吗?然后,您将自动筛选
\u type
,您的关联可以链接到基类。闻起来有点臭,但也许足够了。您也可以尝试绕过关联,手工操作(这也很难闻…。@muistooshort谢谢,但我确实在努力找到最好/最简单的解决方案。我想避免腐败…公平的说,只是放弃一些最后的选择。您是否可以将
deleted_at
替换为所有内容都将具有的
status
标志,然后向关系(例如
:status.ne=>nil
)添加一个将撤消默认范围的筛选器?我倾向于完全避免默认范围。好主意@muistooshort。在这种情况下,我需要覆盖该模型的delete函数(可能还有其他函数)。这样它就定义了一个状态字段。我可能会考虑这一点。闻起来还是有点像黑客。这是关于默认情况下取消扫描关联,而不是模型范围本身。请参见上面编辑的答案。这将允许您调用
@event.all_users
,它将返回该事件的所有用户。
# Event model
def all_users
    User.unscoped.where(event: self)
end