gpt4 book ai didi

ruby-on-rails - 如何在不调用 Rails 范围 lambda 的情况下访问它?

转载 作者:行者123 更新时间:2023-12-04 03:34:09 26 4
gpt4 key购买 nike

我想访问在 rails 作用域中定义的 lamda 作为 lambda 本身并将其分配给一个变量。这可能吗?

所以如果我有以下范围

scope :positive_amount, -> { where("amount > 0") }

我希望能够将此 lambda 放入变量中,例如“正常”lambda 赋值:

positive_amount = -> { where("amount > 0") }

所以像这样:

positive_amount = MyClass.get_scope_lambda(:positive_amount)

为了澄清,我想要的是我通常通过 MyClass.instance_method(method).source.display 使用 method_source gem 访问的方法的主体。我想要这个用于我们系统中正在进行的计算的即时文档。

我们的发票计算是较小方法和范围的组合。我正在尝试制作一份报告,说明计算结果如何,使用实际代码。我在实例方法方面很幸运,但我也想展示作用域:

enter image description here

编辑 1:

按照下面@mu 的建议,我尝试了:

Transaction.method(:positive_amount).source.display

但这会返回:

singleton_class.send(:define_method, name) do |*args|
scope = all
scope = scope._exec_scope(*args, &body)
scope = scope.extending(extension) if extension
scope
end

而不是我期望的方法主体。

最佳答案

如果你说:

class MyClass < ApplicationRecord
scope :positive_amount, -> { where("amount > 0") }
end

那么您实际上是在向 MyClass 添加一个名为 positive_amount 的类方法。所以如果你想访问范围,你可以使用 method method :

positive_amount = MyClass.method(:positive_amount)
#<Method: MyClass(...)

这会给你一个 Method实例,但如果你真的需要一个,你可以获得一个过程:

positive_amount = MyClass.method(:positive_amount).to_proc
#<Proc:0x... (lambda)>

关于ruby-on-rails - 如何在不调用 Rails 范围 lambda 的情况下访问它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67256056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com