相关模型的每个实例的活动管理范围

2023-11-27

我对动态活动管理范围有疑问。我试图为我的应用程序中“项目”的每个“经理”创建一个范围。但是,当创建新的经理(或分配给项目)时,范围似乎不会更新,但如果我重新启动服务器,它们会更新。所以代码本身“有效”,但显然不是按照我希望的方式。我是一个 ruby​​/rails 菜鸟,所以我不确定是否需要做一些事情以某种方式“刷新”范围。

仅供参考,我在 Heroku Cedar 上使用 Rails 3.2 和 ActiveAdmin

这是有问题的代码(可以工作,但仅在服务器重新启动后引入新的管理器):


Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
end

以及整个 Active Admin 项目模型:

ActiveAdmin.register Project do
 menu :priority => 1
 index do
  column :name
  column :company_name
  column :status
  column :projection do |project|
   number_to_currency project.projection
  end
  column :updated_at
  default_actions
 end

 scope :all
 scope :working, :default => true do |projects|
  projects.where(:status => 'working')
 end

 Manager.find_each do |m|
  scope m.first_name do |projects|
    projects.where(:manager_id => m.id)
  end
 end
end

这是此问题的实际解决方案...尽管使用过滤器更理想的稳定性和维护性,但这在 ActiveAdmin 中看起来更好,并且更加用户友好,因为范围变成了漂亮的选项卡。

这有点像黑客,但在适当的情况下它是一个可行的解决方案:

诀窍是更新控制器索引操作的 before_filter 中的范围.

如果您在资源上创建了许多范围,这可能会变得很糟糕(尽管您可以轻松设置一些限制)

ActiveAdmin.register Project do
  menu :priority => 1
  index do
    column :name
    column :company_name
    column :status
    column :projection do |project|
      number_to_currency project.projection
    end
    column :updated_at
    default_actions
  end

  scope :all
  scope :working, :default => true do |projects|
    projects.where(:status => 'working')
  end

  controller do
    before_filter :update_scopes, :only => :index

    def update_scopes
      resource = active_admin_config

      Manager.all.each do |m|
        next if resource.scopes.any? { |scope| scope.name == m.first_name }
        resource.scopes << (ActiveAdmin::Scope.new m.first_name do |projects|
          projects.where(:manager_id => m.id)
        end)
      end

      # try something like this for deletions (untested)
      resource.scopes.delete_if do |scope|
        !(Manager.all.any? { |m| scope.name == m.first_name } || ['all', 'working'].include?(scope.name)) # don't delete other scopes you have defined
      end

    end
  end
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

相关模型的每个实例的活动管理范围 的相关文章

随机推荐

  • var 关键字并不总是有效?

    C VS 2010 有人请解释一下为什么我不能使用var在我下面的代码中 var props TypeDescriptor GetProperties adapter error CS1061 object does not contain
  • 拟合3D点python

    我有 python 代码 可以生成数字 x y 和 z 的三元组列表 我想使用 scipy curve fit 拟合 z f x y 这是一些不起作用的代码 A 19 20 24 10 40 28 10 50 31 def func x y
  • 为什么我们需要 SQLite 中的 GLOB 子句?

    我是一名 Android 开发人员 最近在 SQLite 中遇到了 GLOB 子句 我不明白为什么我们需要 GLOB 因为 LIKE 已经就位了 这两个子句都有通配符来表示单个和多个字符 唯一的区别是 GLOB 区分大小写 但这就是全部吗
  • 如何在带有警告的情况下对 data.table 中的组进行采样

    这个问题非常类似于对 data table 中每组内的随机行进行采样 区别在于一个细微之处 我没有足够的声誉来讨论这个问题本身 让我们稍微改变一下 Christopher Manning 的初始数据 gt DT data table a c
  • Bootstrap 的 JavaScript 需要 jQuery 而 jQuery 已经加载

    我在加载时遇到错误Bootstrap库 因为它总是给出此错误 未捕获的错误 Bootstrap 的 JavaScript 需要 jQuery 尽管如此 我还是附上了Bootstrap库确定后jQuery已加载但仍然出现错误 我正在使用以下代
  • Typescript:使用私有、公共和无声明类变量之间的区别

    有什么区别 A class foo bar string B class foo private bar string C class foo public bar string 显然我可以使用以下命令在所有三种情况下访问 bar var
  • 实施键盘快捷键

    我目前使用的是onKeyDown事件和一个if else创建键盘快捷键的语句 if Keyboard Modifiers ModifierKeys Shift ModifierKeys Shift e Key Key Tab else if
  • MUI v5 + Storybook:主题和字体系列在 Storybook 中不起作用

    我遇到一个问题 MUI 主题在 Codesandbox 中有效 但在 Storybook 中无效 演示展示它在没有故事书的情况下工作 https codesandbox io s typescript material ui textfie
  • 使用 devtools::install_github() 安装无法检测构建工具

    这是我第一次尝试下载 Github 包 在 MacOS Big Sur v11 2 1 上使用 RStudio v1 2 5033 时遇到了一些问题 最初 运行时 library devtools devtools install gith
  • 在Python中将分钟转换为HH:MM格式[重复]

    这个问题在这里已经有答案了 首先 我想指出我是Python的初学者 我的问题是我不知道在 Python 中将分钟转换为 HH MM 格式的正确方法是什么 任何帮助表示赞赏 Use the divmod 功能 02d 02d format d
  • 如何从授权的 access_token 创建 GoogleCredential?

    我有一个像这样的 OAuth2 令牌 access token xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx expires in 3600 refresh token xxxxxxxxxxxxxxx
  • 客户端已断开连接

    我在 WebAPI 日志中收到以下错误 System Web HttpException 0x800703E3 客户端已断开连接 在 System Web Hosting IIS7WorkerRequest EndRead IAsyncRe
  • 如何使用 winapi 了解 Windows 文件系统中的文件何时以及哪些文件被更改

    我为教育目的制作了具有间谍软件功能的程序 我需要在程序中知道文件系统何时更改文件以及正在更改哪些文件 我怎样才能在 C 中做到这一点 在 Windows 上 查看SHChangeNotifyRegister 它不仅告诉您发生了何种类型的更改
  • 如何连接Heroku Redis TLS节点?

    我似乎无法在 Node 上使用 TLS 连接到 Heroku Redis 这些文档并没有多大帮助 https devcenter heroku com articles secure heroku redis 有人有一个有效的例子吗 我应该
  • Markdown 将 JavaScript 中的双星号转换为粗体文本

    我正在尝试制作自己的可降价文本区域 就像 Stackoverflow 所做的那样 目标是让人们能够打字 blah blah 在文本区域中 并在 div 中输出 span style font weight bold blah blah sp
  • PHP:对象分配给静态属性,这是非法的吗?

    将某个对象分配给静态属性是非法的吗 我在下面的代码中收到 HTTP 500 错误 require once class linkedlist php class SinglyLinkedlistTester public static ll
  • 创建自定义 TSetProperty 属性编辑器

    我正在尝试为某些自定义组件创建自定义属性编辑器 自定义属性编辑器旨在编辑一些设置属性 例如 type TButtonOption boOption1 boOption2 boOption3 TButtonOptions set of TBu
  • 在 VB.NET 字符数组中添加“c”有什么作用?

    我想使用 String 方法 IndexOfAny 来检查指定字符串中是否存在字符 我在网上找到的使用 IndexOfAny 方法的示例在使用 VB NET 时在字符数组中的每个字符后面包含一个 c 然而 当我查看 VB NET 中简单字符
  • 无锁同步

    我的问题与多线程无锁同步有关 我想知道以下内容 实现这一目标的一般方法是什么 我在某处读到过有关 LockFreePrimitives 的内容 如 CompareAndExchange CAS 或 DoubleCompareAndExcha
  • 相关模型的每个实例的活动管理范围

    我对动态活动管理范围有疑问 我试图为我的应用程序中 项目 的每个 经理 创建一个范围 但是 当创建新的经理 或分配给项目 时 范围似乎不会更新 但如果我重新启动服务器 它们会更新 所以代码本身 有效 但显然不是按照我希望的方式 我是一个 r