这个我想不通。 在 Rails 模型中,我想在同一模型中调用一个方法来操作 find 方法返回的数据。这个“过滤器”方法将从这个模型中的许多自定义查找方法中调用,所以我希望它是分开的。 (而且我无法从 SQL 中过滤它太复杂了)
这是一个例子:
#controller
@data = Model.find_current
#model
class Model
def self.find_current
@rows = find(:all)
filter_my_rows
return @rows
end
def filter_my_rows
#do stuff here on @rows
for row in @rows
#basically I remove rows that do not meet certain conditions
end
end
end
结果是:未定义的方法 `filter_my_rows'
感谢您的帮助!
最佳答案
部分问题在于您正在定义一个名为 find_current 的类方法和一个名为 filter_my_rows 的实例方法。通常,您将它们都定义在同一范围内,以便它们一起工作。
另一件事是,您可以通过简单的 Array#reject 调用来完成所需的大量过滤。例如:
@models = all.reject do |m|
# This block is used to remove entries that do not qualify
# by having this evaluate to true.
!m.current
end
您也可以通过根据需要插入函数来将其模块化,但如果您不小心的话,管理起来可能会非常复杂。
# Define reusable blocks that are organized into a Hash
CONDITION_FILTERS = {
:current => lambda { |m| m.current }
}
# Array#select is the inverse of Array#reject
@models = all.select(CONDITION_FILTERS[:current])
虽然您在问题中声明这只是因为担心在从数据库中加载所有记录之前无法确定特定记录的相关性,但这通常是错误的形式,因为您可能会拒绝您经历了检索和实例化为模型的麻烦的大量数据只是为了立即丢弃它们。
如果可能,您至少应该在请求期间缓存检索到的行,这样您就不必一遍又一遍地获取它们。
关于ruby-on-rails - rails : call method within model,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143405/