Ruby on rails 4 作用域在ActiveAdmin ROR中不起作用

Ruby on rails 4 作用域在ActiveAdmin ROR中不起作用,ruby-on-rails-4,activeadmin,Ruby On Rails 4,Activeadmin,为了允许我在ActiveAdmin中快速过滤记录,我在模型上定义了作用域。我有“已装运”和“未装运”的作用域,如下所示。出于某种原因,“已发货”范围按预期工作,并显示已发货项目的数量,但“未发货”范围不起任何作用,它似乎不知道什么是未发货的。似乎我必须先勾选然后取消勾选“已发货”复选框,这样它才能知道它已取消发货 订单模型 class Order < ActiveRecord::Base scope :shipped, where(:shipped => true)

为了允许我在ActiveAdmin中快速过滤记录,我在模型上定义了作用域。我有“已装运”和“未装运”的作用域,如下所示。出于某种原因,“已发货”范围按预期工作,并显示已发货项目的数量,但“未发货”范围不起任何作用,它似乎不知道什么是未发货的。似乎我必须先勾选然后取消勾选“已发货”复选框,这样它才能知道它已取消发货

订单模型

class Order < ActiveRecord::Base

    scope :shipped, where(:shipped => true)
    scope :unshipped, where(:shipped => false)

end
ActiveAdmin.register Order do

    scope :all, :default => true
    scope :shipped
    scope :unshipped

index do
    selectable_column
    column "Status", :sortable => :shipped do |s|
      status_tag((s.shipped? ? "Shipped" : "Unshipped"), (s.shipped? ? :ok : :warning))
    end
end
end
有人知道问题出在哪里吗?
非常感谢

这是您型号的实际代码吗

应该是:

scope :shipped, -> { where(shipped: true) }
scope :unshipped, -> { where(shipped: false) }

意识到
shipped
默认情况下未设置为false,因此通过在Orders表中执行此操作解决了此问题。

是的,我以前尝试过您建议的方法,结果与arghh完全相同。您可以尝试将“shipped”范围的名称更改为尚未定义的属性(或在模型上定义的其他属性).不幸的是,没有运气:/Unshipped按钮是否与索引一起出现?如果是这样,当你点击它时,你在日志中看到了什么?是的,它确实出现了<代码>参数:{“scope”=>“unshipped”}管理员用户加载(0.2ms)从“管理员用户”中选择“管理员用户”。*从“管理员用户”中选择“管理员用户”。“id”=1“管理员用户”的订单。“id”ASC限制1(0.2ms)从“订单”中选择计数(*)(0.1ms)从“订单”中的“订单”中选择计数(*)。“发货”='f'(0.2ms)从“订单”中的“订单”中选择计数(*)。“shipped”=“t”(0.3ms)选择COUNT(COUNT_column)FROM(从“orders”中的“orders”中选择1作为COUNT_column)。“shipped”=“f”LIMIT 30 OFFSET 0)子查询_for_COUNT是布尔值应始终具有默认值,否则它们不是真正的布尔值。但在该范围内仍应使用lambda。