完成活动记录

Mic*_*ski 1 ruby-on-rails

我收到了任务:

向User模型类添加一个名为get completed count的方法,其中:

•接受用户作为参数

•使用聚合查询功能确定用户已完成的TodoItem的数量

- (提示:您正在寻找与特定用户关联的TodoItem的计数,其中已完成:true)

•返回计数

 class User < ActiveRecord::Base

     has_one :profile, dependent: :destroy
     has_many :todo_lists, dependent: :destroy
     has_many :todo_items, through: :todo_lists, source: :todo_items, dependent: :destroy
     validates :username, presence: true

     def get_completed_count
        todo_items.length
    end

  end
Run Code Online (Sandbox Code Playgroud)

有没有人可以解释什么是完整的方法呢?

谢谢,迈克尔.

mat*_*nco 7

所以你写了"接受用户作为参数",所以你应该做以下事情:

def self.get_completed_count(user)
  user.todo_items.where(completed: true).count
end
Run Code Online (Sandbox Code Playgroud)

你可以称之为:

User.get_completed_count(user)
Run Code Online (Sandbox Code Playgroud)

但上面的代码没有任何意义,因为更好的是将它作为实例方法:

def get_completed_count
  self.todo_items.where(completed: true).count
end
Run Code Online (Sandbox Code Playgroud)

此代码将仅在实例上返回相同的结果.

你可以称之为:

User.find(id).get_completed_count
Run Code Online (Sandbox Code Playgroud)

我假设TodoItem已经完成了一个布尔值(更好地创建一个范围并在方法中使用此范围而不是where(completed: true)).