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

ruby-on-rails – 多种型号的范围

发布时间:2020-12-16 19:18:34 所属栏目:百科 来源:网络整理
导读:我有几个对象都有一个批准的字段. 在所有模型中实施范围的最佳方法是什么? 例如,我有一个目击对象和一个评论对象.在向公众提供之前,他们都必须得到管理员的批准. 那么我怎么能创建一个范围来分别返回comment.approved和sighting.approved而不在每个模型上重
我有几个对象都有一个批准的字段.

在所有模型中实施范围的最佳方法是什么?

例如,我有一个目击对象和一个评论对象.在向公众提供之前,他们都必须得到管理员的批准.

那么我怎么能创建一个范围来分别返回comment.approved和sighting.approved而不在每个模型上重复它?这是关注的问题吗?

解决方法

虽然只是想要范围功能,但只是在每个模型中声明一个范围是好的.使用ActiveSupport :: Concern将使您能够添加其他方法,如果这是您认为将要发生的事情.这是一个例子:
# /app/models/concerns/approved.rb
module Approved
  extend ActiveSupport::Concern

  included do
    default_scope { where(approved: false) }
    scope :approved,-> { where(approved: true) }
  end

  def unapprove
    update_attribute :approved,false
  end
end

class Sighting < ActiveRecord::Base
  include Approved
end

class Comment < ActiveRecord::Base
  include Approved
end

然后,您可以拨打Sighting.approved和Comment.approved等电话,以获取已批准记录的相应列表.您还可以获得unapprove方法,并可以执行Comment.approved.first.unapprove之类的操作.

在这个例子中,我还包括default_scope,这意味着像Sighting.all或Comment.all这样的调用将只返回未批准的项目.我将此作为示例包含在内,它可能不适用于您的实现.

(编辑:李大同)

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

    推荐文章
      热点阅读