Rails 4 - 计算用户项目的方法

Rails 4 - method to count a user's projects

我正在尝试学习如何在我的 Rails 4 应用程序中编写一种计算用户项目的方法。

我有名为项目和配置文件的模型。这些协会是:

项目

belongs_to :profile

简介

has_many :projects

在我的项目模型中,我有一个按 profile_id 查找项目的范围。

scope :by_profile, ->(profile_id) { where(profile_id: profile_id) }

现在,我正在尝试编写方法来计算配置文件创建了多少个项目。

def project_counter
    # projects created by this project creator
    self.by_profile.count 

    # plus all the projects where the user is part of a project team


  end

当我保存它并尝试在视图中使用它时:

<%= @project.project_counter %>

我收到一条错误消息:

undefined method `by_profile' for #<Project:0x007f98f1dff278>
Did you mean?  profile

谁能看出我做错了什么?

当您调用 <%= @project.project_counter %> 时,@project 是方法内部引用 self 的上下文。请注意 self 是实例而不是 class Project

因此,在方法内部,当您调用 self.by_profile 时,您所做的就是在实例上调用 by_profile。但是 by_profile 仅在 class 项目中可用,而不是实例。这就是为什么你得到一个 undefined methodby_profile' for #. Here#` 指的是实例(由内存位置指向)。

另请注意,您没有将 profile_id 传递给 by_profile,但 ruby 不会抱怨,因为它正在寻找实例方法 by_profile 并且不是 class 方法 by_profile。(作用域实际上添加了 class 方法)

如果你想计算一个用户(个人资料)的项目,为什么不使用 @project.user.projects.count

希望对您有所帮助!