加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 当你可以使用常规的Ruby类方法时,为什么要使用

发布时间:2020-12-17 02:09:02 所属栏目:百科 来源:网络整理
导读:领域 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
领域

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

在控制器中

@recent_comments = Comment.most_recent(5)

当你可以使用常规的Ruby类方法时,为什么要使用作用域?

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读