【发布时间】:2018-10-25 09:01:42
【问题描述】:
我希望将默认范围仅应用于模型中的index 操作。
我将default_scope 添加到模型中:
default_scope { where(:status => "Active") }
我可以在其他操作中使用unscope(即show、edit、update 和delete):
@beacon = Beacon.where(id: params[:id]).unscope(where: :status).first
代替:
@beacon = Beacon.find(params[:id]
覆盖默认范围的行为。
是否有任何 ActiveAdmin 或 Rails 方法可以将默认范围 仅应用于index?
我正在使用 ActiveAdmin。
将来我可能会添加更多操作,只是我需要应用默认范围,因此我正在寻找一个更短更紧凑的解决方案。
【问题讨论】:
-
为什么不在索引操作中应用这个范围?
-
@Ilya 我将来可能会添加更多操作,我只需要将默认范围应用于这些操作,因此我正在寻找更短的解决方案。
-
我能想到的最简洁的方法是在您的控制器中使用一个单独的“收集”方法,并使用一个之前的操作将您想要的范围应用于给定操作的该集合。鉴于模型不知道它在哪个控制器操作中,我看不到直接从模型文件中执行此操作的方法。
-
@Mark 感谢您的评论。我最终考虑了您的方法,最终结果是简洁紧凑的解决方案 :)
-
不用担心 - 本来打算写这样的东西,但今天我的老板和我在办公室,所以不得不等到午餐 :)