Ruby on rails 如何为ActiveRecordModel的all where查询添加条件?
我的rails应用程序中有一个用户表,该应用程序在整个应用程序中使用了许多控制器方法中该模型的许多Ruby on rails 如何为ActiveRecordModel的all where查询添加条件?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我的rails应用程序中有一个用户表,该应用程序在整个应用程序中使用了许多控制器方法中该模型的许多where条件 现在我必须为where条件添加一个额外的属性。 有没有办法做到以下几点?如何做到?我可以向用户模型中写入自定义的where,而不是向整个应用程序中使用的所有where条件添加额外属性,以便将该条件预先添加到用户模型的整个应用程序中的where 我找到了那个地方的来源 def where(opts = :chain, *rest) if :chain == opts WhereC
where
条件
现在我必须为where条件添加一个额外的属性。
有没有办法做到以下几点?如何做到?我可以向用户模型中写入自定义的where
,而不是向整个应用程序中使用的所有where条件添加额外属性,以便将该条件预先添加到用户模型的整个应用程序中的where
我找到了那个地方的来源
def where(opts = :chain, *rest)
if :chain == opts
WhereChain.new(spawn)
elsif opts.blank?
self
else
spawn.where!(opts, *rest)
end
end
我现在在控制器方法中的位置条件:
User.where(:status => true, :country => "IN")
此条件和类似条件在应用程序中的许多方法中都有使用,我希望获得尚未停用的用户
我可以在条件允许的情况下对所有内容进行更改
User.where(:status => true, :country => "IN", :deactivated => false)
相反,我想到了编写一个自定义,其中precheck
:deactivated=>false
默认范围:
class User < ActiveRecord::Base
default_scope -> { where(deactivated: false) }
end
class User < ActiveRecord::Base
scope :deactivated, ->(deactivated = false) { where(deactivated: deactivated) }
end
现在,要使用该范围,您可以这样查询:
User.deactivated.where(:status => true, :country => "IN")
供参考:
我不能使用
默认\u范围
,因为假设一个项目属于一个停用的用户。如果我们给出项目。用户
它将不会显示结果。更新了答案,请检查此解决方案。据我所知,我还需要对我的方法中存在的所有旧条件进行更改,这是仅有的两个选项。添加属于_to:user,->{unscope(where::deactivated)}
将从关联中取消作用域,感谢您的回答,请更新以便我可以接受答案