【问题标题】:Scope not working in ActiveAdmin ROR范围在 ActiveAdmin ROR 中不起作用
【发布时间】:2014-05-08 10:01:10
【问题描述】:

为了让我能够在 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

谁能看出问题所在? 非常感谢

【问题讨论】:

    标签: ruby-on-rails-4 activeadmin


    【解决方案1】:

    这是您模型中的实际代码吗?

    应该是:

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

    【讨论】:

    • 是的,我已经尝试过你之前建议的方式,结果完全一样啊
    • 您可以尝试将“已发货”范围的名称更改为尚未成为属性(或在模型上以其他方式定义)的名称。
    • 不幸的是,没有运气:/
    • 未发货按钮是否与索引一起出现?如果是这样,单击日志时您会在日志中看到什么?
    • 是的,它确实出现了。 Parameters: {"scope"=&gt;"unshipped"} AdminUser Load (0.2ms) SELECT "admin_users".* FROM "admin_users" WHERE "admin_users"."id" = 1 ORDER BY "admin_users"."id" ASC LIMIT 1 (0.2ms) SELECT COUNT(*) FROM "orders" (0.1ms) SELECT COUNT(*) FROM "orders" WHERE "orders"."shipped" = 'f' (0.2ms) SELECT COUNT(*) FROM "orders" WHERE "orders"."shipped" = 't' (0.3ms) SELECT COUNT(count_column) FROM (SELECT 1 AS count_column FROM "orders" WHERE "orders"."shipped" = 'f' LIMIT 30 OFFSET 0) subquery_for_count
    【解决方案2】:

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

    【讨论】:

    • 是的,布尔值应该总是有一个默认值,否则它们就不是真正的布尔值。但您仍应在该范围内使用 lambda。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2018-07-13
    相关资源
    最近更新 更多