我正在尝试使用.count
方法将布尔字段设置为特定状态来累计记录。
例如,博客的Post表中有一个名为posted_at
的字段,当帖子尚未发布时(仅草稿),该字段具有空值,并包含帖子发布时的时间戳。
运行@posts.count
会按预期返回帖子总数
正在运行@post.posted?
会按预期返回posted_at
字段的状态
但是,@posts.posted.count
运行失败并显示method_missing
错误
我试过了posted?.count
并得到了同样的结果。
似乎ActiveRecord足够聪明,可以确定在定位一条记录时,posted?
应检查posted_at
字段的状态,而不在模型中定义posted?
方法。是否也足够聪明,知道在将.count方法添加到混合中时我们要做什么,或者我们是否需要将其定义为方法?
答案 0 :(得分:0)
ActiveRecord没有创建自动方法来执行此操作,但您可以将scope
用于此目的,方法是将其添加到Post
模型中:
scope :posted, -> { where.not(posted_at: nil) }
然后,您可以在任何地方执行此操作:
@posts.posted.count