gpt4 book ai didi

ruby-on-rails - 在 ActiveRecord where 子句中使用实例方法

转载 作者:行者123 更新时间:2023-12-04 05:47:09 25 4
gpt4 key购买 nike

我有一个实例方法,它具有我想在查询中使用的逻辑。我的尝试没有奏效。在构建我的 where 子句时,我不想复制 is_thing 中的逻辑。

class Foo < ActiveRecord::Base

def is_thing?
#... some logic
end

end

我试过了

Foo.where(is_thing?)

得到了

NoMethodError: undefined method `is_thing?' for main:Object

最佳答案

我推荐的方法

我确实认为该方法不是好的做法(链接 where 查询)。它只会增加不必要的复杂性。

更好的方法是使用作用域

scope :is_thing?, -> { where(thing: true) }

并调用它

Foo.is_thing?.where()

原因

返回原因

NoMethodError: undefined method `is_thing?' for main:Object

是因为is_thing?是 Foo 的实例变量

可以在类的实例上调用实例变量。并且在主要对象上不可用。

你可以做

Foo.where(Foo.new.is_thing?)

如果转换 is_thing 是否可以使用它?类方法。例如

def self.is_thing?
# code
end

然后这样使用

Foo.where(Foo.is_thing?)

关于ruby-on-rails - 在 ActiveRecord where 子句中使用实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41508939/

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