计数方法,将布尔字段设置为特定状态的记录总计。回报率

时间:2016-09-01 07:41:48

标签: ruby-on-rails-4 activerecord count

我正在尝试使用.count方法将布尔字段设置为特定状态来累计记录。

例如,博客的Post表中有一个名为posted_at的字段,当帖子尚未发布时(仅草稿),该字段具有空值,并包含帖子发布时的时间戳。

运行@posts.count会按预期返回帖子总数

正在运行@post.posted?会按预期返回posted_at字段的状态

但是,@posts.posted.count运行失败并显示method_missing错误 我试过了posted?.count并得到了同样的结果。

似乎ActiveRecord足够聪明,可以确定在定位一条记录时,posted?应检查posted_at字段的状态,而不在模型中定义posted?方法。是否也足够聪明,知道在将.count方法添加到混合中时我们要做什么,或者我们是否需要将其定义为方法?

1 个答案:

答案 0 :(得分:0)

ActiveRecord没有创建自动方法来执行此操作,但您可以将scope用于此目的,方法是将其添加到Post模型中:

scope :posted, -> { where.not(posted_at: nil) }

然后,您可以在任何地方执行此操作:

@posts.posted.count