gpt4 book ai didi

ruby-on-rails - 当您可以使用常规 Ruby 类方法时,为什么要使用作用域?

转载 作者:数据小太阳 更新时间:2023-10-29 08:07:25 24 4
gpt4 key购买 nike

范围

class Comment < ActiveRecord::Base
scope :most_recent, -> (limit) { order("created_at desc").limit(limit) }
end

使用范围

@recent_comments = Comment.most_recent(5)

类方法

在模型中

def self.most_recent(limit)
order("created_at desc").limit(limit)
end

在 Controller 中

@recent_comments = Comment.most_recent(5)

既然可以使用常规 Ruby 类方法,为什么还要使用作用域?

最佳答案

我认为使用 scopes 的最大原因是因为它总是返回一个 ActiveRecord::Relation,即使 scope 的计算结果为 nil 不像类方法。您还可以将特定方法添加到范围,除非调用该范围,否则这些方法不会出现在类中。

scope :lovely, -> name { where(name: name) if name.present? }

如果没有名称,这将返回集合。但是在类方法中,你必须做这样的事情

def self.lovely(name)
if name.present?
where(name: name)
else
all
end
end

您可以在此处找到范围的更多文档:Active Record scopes vs class methods在这里:Should You Use Scopes or Class Methods?ActiveRecord::Scoping::Named::ClassMethods

关于ruby-on-rails - 当您可以使用常规 Ruby 类方法时,为什么要使用作用域?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36214937/

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